1.SpringBoot有默认的错误处理机制
1.1浏览器的错误处理结果
1.2客户端的错误处理结果
2.错误处理的自动配置原理
2.1.查找SpringBoot中ErrorMvcAutoConfiguration.class这个配置类,这个配置类中有四个组件,这个四个组件共同决定了SpringBoot的错误处理机制
2.2.配置类中的四个组件ErrorPageCustomizer、BasicErrorController、DefaultErrorViewResolver、DefaultErrorAttributes
3.分析组件的作用
3.1.ErrorPageCustomizer:可以在源码配置类中找到这个类,查看代码发现它的作用就是相当于SpringMVC在web.xml配置文件中配置发生错误跳转的前端控制器,处理路径一样。
Ctrl点击这个类里面的getPath(),进入到ErrorProperties.class,可以看到下面的代码
意思是如果error.path能从配置中取出值就取值注入path属性,如果没有值则注入'/error'。
组件作用:配置错误跳转的处理路径,默认跳到/error去处理
3.2.BasicErrorController:可以在源码配置类中找到这个类,查看代码发现它的作用本质就是SpringMVC的一个Controller,
,从这个类代码中的注解可以看到是用于处理/error的,里面有两个方法errorHtml和ResponseEntity,分别是处理浏览器访问产生的错误页面和客户端访问产生的处理页面。
判断的依据是HTTP请求头的接收优先级,如下图
浏览器请求头
客户端请求头
组件作用:自适应处理不同的错误页面跳转请求
3.3.DefaultErrorViewResolver,作用就是判断用哪一个视图处理器来处理,并且会根据错误状态码来选择对应错误码名字的html。如下分析
组件作用:如果有模板引擎就用模板引擎的视图处理器,按模板引擎的视图处理来执行,如果没有就到静态资源文件夹下面的error文件夹招错误页这样来处理。
3.4DefaultErrorAttributes的作用就是把比如timestamp时间戳这样的信息放入让页面能够共享。
里面的一个方法getErrorAttributes会为错误页面返回发一些共享参数,BasicErrorController里面的浏览器和客户端的处理方法都是调用了这个类的方法获取参数。(可以通过继承这个类然后放入到容器中来添加自己想添加的参数)
当错误视图处理器的进行页面渲染参数赋值就能获取发生错误的相应信息来展示到错误页面上。
4.整个处理机制和组件的本质就是SpringMVC的三大组件和处理流程
只不过是根据错误响应作出相应的改变