Spring Boot学习笔记(9)—— SpringBoot自定义错误处理

springBoot默认的错误处理机制

浏览器发送一个不存在的请求时,会报404,浏览器出现springboot默认的404错误页面
Spring Boot学习笔记(9)—— SpringBoot自定义错误处理
如果是服务器内部出现错误,则抛出500错误页面
Spring Boot学习笔记(9)—— SpringBoot自定义错误处理

springBoot默认错误机制底层原理分析

底层原理关注 ErrorMvcAutoConfiguration 错误自动配置类
**第1步:**ErrorPageCustomizer 错误页面定制器
Spring Boot学习笔记(9)—— SpringBoot自定义错误处理
当应用出现了4xx或5xx之类的错误 ,ErrorPageCustomizer就会被**,它主要 用于定制错误 处理的响应规则,就会发送一个/error请求,它会交给 BasicErrorController进行处理
第2步: BasicErrorController 就会接收 /error 请求处理
Spring Boot学习笔记(9)—— SpringBoot自定义错误处理
BasicErrorController 会接收一个/error请求, 两个 方法处理,第1个erroHtml响应html数据, 还有一个error用来响应json数据 的, 使用了 ErrorViewResolver (DefaultErrorViewResolver)组件进行封装视图
第3步: DefaultErrorViewResolver 去解析具体响应的错误页面
![在
Spring Boot学习笔记(9)—— SpringBoot自定义错误处理
Spring Boot学习笔记(9)—— SpringBoot自定义错误处理

自定义错误页面

第1种 :有模板引擎
1、error/状态码 : 精确匹配,将错误页面命名为 错误状态码.html 放在模板引擎目录 templates 下
的 error 目录下,发生对应状态码错误时,就会响应对应的模板页面
2、error/4xx 、error/5xx :模糊匹配, 可以将错误页面命名为 4xx 和 5xx ,有来匹配对应类型的
所有错误
3、采用精确优先
4、错误页面可获取的的数据信息:
timestamp:时间戳
status:状态码
error:错误提示
exception:异常对象
message:异常消息
errors:JSR303数据校验出现的错误
第2种:没有模板引擎 (模板引擎找不到对应错误页面)
静态资源目录下的 error 目录中找
注意:静态资源目录就是 4个静态资源目录:
classpath:/META-INF/resources/
classpath:/resources/
classpath:/static/
classpath:/public/
寻找自定义错误页面的方式和 有模板引擎 的寻找方式一样
第3种: 模板目录与静态目录下都找不到对应错误页面,就响应 SpringBoot 默认的错误页面

自定义数据在错误页面响应

分析:出现错误以后,会发送 /error 请求,会被 BasicErrorController 处理,而响应的数据是由
getErrorAttributes 封装的(就是 ErrorController 的实现类 AbstractErrorController.getErrorAttributes 的方法),所以我们只需要自定义 ErrorAttributes 实现类即可

自定义 ErrorAttributes:
Spring Boot学习笔记(9)—— SpringBoot自定义错误处理