千家信息网

SpringBoot中404、500异常页面配置怎么解决

发表于:2024-10-14 作者:千家信息网编辑
千家信息网最后更新 2024年10月14日,本篇内容介绍了"SpringBoot中404、500异常页面配置怎么解决"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅
千家信息网最后更新 2024年10月14日SpringBoot中404、500异常页面配置怎么解决

本篇内容介绍了"SpringBoot中404、500异常页面配置怎么解决"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

I. 环境搭建

首先得搭建一个web应用才有可能继续后续的测试,借助SpringBoot搭建一个web应用属于比较简单的活;

创建一个maven项目,pom文件如下

    org.springframework.boot    spring-boot-starter-parent    2.1.7         UTF-8    UTF-8    Finchley.RELEASE    1.8            org.springframework.boot        spring-boot-starter-web                com.alibaba        fastjson        1.2.45                                            org.springframework.boot                spring-boot-maven-plugin                                    spring-milestones        Spring Milestones        https://repo.spring.io/milestone                    false            

依然是一般的流程,pom依赖搞定之后,写一个程序入口

/** * Created by @author yihui in 15:26 19/9/13. */@SpringBootApplicationpublic class Application {    public static void main(String[] args) {        SpringApplication.run(Application.class);    }}

II. 异常页面配置

在SpringBoot项目中,本身提供了一个默认的异常处理页面,当我们希望使用自定义的404,500等页面时,可以如何处理呢?

1. 默认异常页面配置

在默认的情况下,要配置异常页面非常简单,在资源路径下面,新建 error 目录,在下面添加400.html, 500html页面即可

项目结构如上,注意这里的实例demo是没有使用模板引擎的,所以我们的异常页面放在static目录下;如果使用了如FreeMaker模板引擎时,可以将错误模板页面放在template目录下

接下来实际测试下是否生效, 我们先定义一个可能出现服务器500的服务

@Controller@RequestMapping(path = "page")public class ErrorPageRest {    @ResponseBody    @GetMapping(path = "divide")    public int divide(int sub) {        System.out.println("divide1");        return 1000 / sub;    }}

请求一个不存在的url,返回我们定义的400.html页面

    404页面

页面不存在

请求一个服务器500异常,返回我们定义的500.html页面

    500页面

服务器出现异常!!!

2. BasicErrorController

看上面的使用比较简单,自然会有个疑问,这个异常页面是怎么返回的呢?

从项目启动的日志中,注意一下RequestMappingHandlerMapping

可以发现里面有个/error的路径不是我们自己定义的,从命名上来看,这个多半就是专门用来处理异常的Controller -> BasicErrorController, 部分代码如下

@Controller@RequestMapping("${server.error.path:${error.path:/error}}")public class BasicErrorController extends AbstractErrorController {        @Override        public String getErrorPath() {                return this.errorProperties.getPath();        }        @RequestMapping(produces = "text/html")        public ModelAndView errorHtml(HttpServletRequest request,                        HttpServletResponse response) {                HttpStatus status = getStatus(request);                Map model = Collections.unmodifiableMap(getErrorAttributes(                                request, isIncludeStackTrace(request, MediaType.TEXT_HTML)));                response.setStatus(status.value());                ModelAndView modelAndView = resolveErrorView(request, response, status, model);                return (modelAndView != null) ? modelAndView : new ModelAndView("error", model);        }        @RequestMapping        @ResponseBody        public ResponseEntity> error(HttpServletRequest request) {                Map body = getErrorAttributes(request,                                isIncludeStackTrace(request, MediaType.ALL));                HttpStatus status = getStatus(request);                return new ResponseEntity<>(body, status);        }}

这个Controller中,一个返回网页的接口,一个返回Json串的接口;我们前面使用的应该是第一个,那我们什么场景下会使用到第二个呢?

  • 通过制定请求头的Accept,来限定我们只希望获取json的返回即可

3. 小结

本篇内容比较简单,归纳为两句话如下

  • 将自定义的异常页面根据http状态码命名,放在/error目录下

  • 在异常状况下,根据返回的http状态码找到对应的异常页面返回

"SpringBoot中404、500异常页面配置怎么解决"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!

0