定制错误数据
Spring boot出现错误以后,会来到/error请求
会被BasicErrorController处理,自适应返回
浏览器访问,返回页面
客户端访问,返回json
getErrorAttributes
获取返回的响应数据
在AbstractErrorController中定义
BasicErrorController的父类
BasicErrorController
处理Error请求,默认配置
@ConditionalOnMissingBean
创建条件
当容器中,没有ErrorController组件的时候
才会,创建默认的错误处理组件BasicErrorController
解决方法
1、完全来编写一个ErrorController的实现类
或者编写AbstractErrorController的子类,放在容器中
2、页面上能用的数据,或者是json返回能用的数据
都是通过errorAttributes.getErrorAttributes得到
getErrorAttributes
调用errorAttributes.getErrorAttributes
errorAttributes
@ConditionalOnMissingBean
创建条件
当容器中,没有ErrorAttributes组件的时候
才会,创建一个默认的DefaultErrorAttributes
DefaultErrorAttributes.getErrorAttributes
默认进行数据处理
自定义ErrorAttributes
为了简单,继承DefaultErrorAttributes
注入到容器中,重写getErrorAttributes方法
获取父类的Map,然后,在Map中追加
自定义的错误信息
//给容器中加入我们自己定义的ErrorAttributes
@Component
public class MyErrorAttributes extends DefaultErrorAttributes {
//返回值的map就是页面和json能获取的所有字段
@Override
public Map<String, Object> getErrorAttributes(RequestAttributes requestAttributes, boolean includeStackTrace) {
Map<String, Object> map = super.getErrorAttributes(requestAttributes, includeStackTrace);
map.put("company","atguigu");
//我们的异常处理器携带的数据
Map<String,Object> ext = (Map<String, Object>) requestAttributes.getAttribute("ext", 0);
map.put("ext",ext);
return map;
}
}
MyExceptionHandler
异常处理器
输出自定义异常的错误信息
可以将map,放在request请求域中
MyErrorAttributes
在request请求域中,获取ext属性
Ext,表示在异常处理器中,携带的数据
然后,追加到map中
最终效果
响应是自适应的
可以通过定制ErrorAttributes,改变需要返回的内容