Spring boot定制错误数据携带出去

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/nangeali/article/details/82632842

定制错误数据

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,改变需要返回的内容

猜你喜欢

转载自blog.csdn.net/nangeali/article/details/82632842