错误处理原则&定制错误页面
- 1. 错误处理机制
- 2 如何定制错误响应
- 2.1 如何定制错误页面
- 2.1 如何定制错误的json数据;
1. 错误处理机制
- 默认效果:
1.PC端浏览器返回一个默认错误页面 - 浏览器发送请求的请求头:
- 2.客户端访问,默认响应json数据
- 原理:
可以参照ErroorMvcAutoConfiguration;错误处理的自动配置
给容器中添加了以下组件
1、ErrorPageCustomizer
2、BasicErrorController(就是一个控制器):处理默认的/error请求;根据请求头中Accept中的内容
3、DefaultErrorViewResolver
4、DefaultErrorAttributes
帮我们在页面共享信息;
步骤:
一旦系统出现4xx或者5xx之类的错误;ErrorPageCustomizer就会生效(定制错误的响应规则);就会来到 /error请求;
1)响应页面;去哪个页面是由DefaultErrorViewResolver解析得到的;
2 如何定制错误响应
2.1 如何定制错误页面
1)有模板引擎的情况下(重点);error/状态码;【将错误页面命名为 错误状态码.html 放在模板引擎文件夹里面的error文件夹下】,发生此状态码的错误就会来到 对应页面;
我们可以使用4xx和5xx作为错误页面的文件名来匹配这种类型所有错误,精确优先(优先寻找精确的状态码.html)
能从页面获取的信息;
2)、没有模板引擎(模板引擎找不到这个错误页面),静态资源文件夹下找;
3)、以上都没有错误页面,就是默认来到SpringBoot默认的错误提示页面;
2.1 如何定制错误的json数据;
1)自定义异常处理&返回定制json数据;没有自适应效果,浏览器和客户端返回的都是json
自定义一个异常:
返回定制json数据(aop思想):
2)转发到/error给BasicErrorController进行自适应响应效果处理(浏览器和客户端分别处理)()
3)将我们的定制数据携带出去;
出现错误以后,会来到/error请求,会被会被BasicErrorController(继承了AbstractErrorController)处理,响应出去可以获取的数据不管是html还是json都是由getErrorAttributes方法得到的(是AbstractErrorController(是ErrorController接口的实现)规定的方法);
2、页面上能用的数据,或者是json返回能用的数据都是通过errorAttributes.getErrorAttributes得到;
容器中DefaultErrorAttributes.getErrorAttributes(),默认进行数据处理的;
自定义的异常处理器:
自定义的ErrorAtrributes:
最终的效果:响应是自适应的,可以通过定制ErrorAttributes改变需要返回的内容