Spring Boot默认异常处理BasicErrorController源码解读

 2019-11-02 21:08  阅读(3963)
文章分类:Spring boot

小伙伴们是不是刚接触Spring Boot做网页开发的时候,如果代码发生异常,会返回一个错误信息页面,如下图

20191102100620\_1.png

那么这个页面是怎么返回的呢,这里就要接触到一个Spring Boot类BasicErrorController,如下图

20191102100620\_2.png

注释信息也说明了,这是一个基础全局错误controller,Spring Boot自带的,看到这个RequestMapping地址,这是一个相当于三元写法,如果你在配置文件配置了server.error.path的话,就会使用你配置的异常处理地址,如果没有就会使用你配置的error.path路径地址,如果还是没有,默认使用/error来作为发生异常的处理地址,如下图

20191102100620\_3.png

那么这个类是如何处理异常的呢,如下图

20191102100620\_4.png

它提供了两个接口处理方法,上面一个标注了produces为text/html,当你是网页请求的时候返回的网页数据,下面的接口是当你的请求为其他的时候,返回的是ResponseEntity对象(json数据或者其他,取决与你的返回数据类型配置)。

我们看到第一个接口返回了一个error页面,如果你的项目静态页面下刚好存在一个error所对应的页面,那么Spring Boot会得到你本地的页面,如下图

20191102100620\_5.png

20191102100620\_6.png

那么这个BasicErrorController默认返回的信息是哪一些呢,如下图

20191102100620\_7.png

这个方法是属于类DefaultErrorAttributes,返回一个map,这个map里面包含了异常发生时间,异常状态,异常详细信息,发生异常的请求路径。如下图是一个异常发生的时候所获取到的异常信息

20191102100620\_8.png

那么,我们该如何抛弃掉或者覆盖掉Spring Boot默认异常处理呢,Spring Boot开发指南上提供了以下四种方法:

1、自定义一个bean,实现ErrorController接口,那么默认的错误处理机制将不再生效。
2、自定义一个bean,继承BasicErrorController类,使用一部分现成的功能,自己也可以添加新的public方法,使用@RequestMapping及其produces属性指定新的地址映射。
3、自定义一个ErrorAttribute类型的bean,那么还是默认的两种响应方式,只不过改变了内容项而已。
4、继承AbstractErrorController

那还来介绍一种方法:统一异常处理

20191102100620\_9.png

统一处理Exception异常,只需要在类上标注ControllerAdvice这个注解,然后在类方法上标注好对应的ExceptionHandler及异常类。如下图

20191102100620\_10.png

20191102100620\_11.png

好了,就介绍到这里,欢迎评价指正!


来源:http://ddrv.cn

点赞(0)
版权归原创作者所有,任何形式转载请联系作者; Java 技术驿站 >> Spring Boot默认异常处理BasicErrorController源码解读

相关推荐