每日鸡汤 ——
这短短的一生我们最终都会逝去,你不妨大胆一些,爱一个人,攀一座山,追一个梦。
1. 使用
- 浏览器客户端响应错误页面,其他客户端响应 json
- error/ 下的 4xx 5xx 页面会被自动解析为错误处理页面,因此我们想自定义错误响应页面,直接将自定义的页面放入 error/ 目录下,命名为 404.html 或 5xx.html 即可
(使用 thymeleaf 模板引擎要放在 templates 文件夹下)
4xx 页面无法找到
5xx 服务器异常
2. 异常处理自动配置原理
2.1 错误处理组件
ErrorMvcAutoConfiguration.Class 类配置了所有异常处理规则,因此我们的分析从此处开始
2.1.1 在容器中放 - DefaultErrorAttributes - id: errorAttributes 组件
ErrorMvcAutoConfiguration.java——
(1)此组件实现了这两个接口 ErrorAttributes,HandlerExceptionResolver:
DefaultErrorAttributes.class ——
(2)定义错误页面中可包含那些数据
DefaultErrorAttributes.java ——
2.1.2 在容器中放 BasicErrorController - id: basicErrorController 组件
DefaultErrorAttributes.java ——
(1)BasicErrorController 中定义了对不同方式发出的错误请求不同的处理方法,决定了错误处理响应方法为 /error 响应页面 和 json 响应数据两种方法。(与前文相对应)。如果想要返回响应页面,找 error 视图 【Static View】 —— 默认是一个空白页
BasicErrorController.java——
(2)BasicErrorController 也决定了可以通过配置 server.error.path:${error.path:/error} 修改默认 error 页面路径
BasicErrorController.java——
找到响应页面的原理 ——
(1)处理默认 /error 路径的请求 ,页面响应 new ModelAndView(“error”, model)
(2)容器中放入组件 View - id: error
ErrorMvcAutoConfiguration.java——
(3)容器中放组件 BeanNameViewResolver 视图解析器 ,按照返回的视图名作为组件的 id 去容器中找 View 对象
ErrorMvcAutoConfiguration.java——
2.1.3 在容器中放 DefaultErrorViewResolver - id: conventionErrorViewResolver 组件
ErrorMvcAutoConfiguration.java——
(1)如果发生错误,会以 HTTP 状态码作为视图页地址 (viewName),拼成字符串,找到真正的页面
DefaultErrorViewResolver.java——