欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

SpringBoot全局异常处理之多个处理器匹配顺序(最新推荐),

来源: javaer 分享于  点击 15589 次 点评:178

SpringBoot全局异常处理之多个处理器匹配顺序(最新推荐),


目录
  • 多个处理器的两种情况
    • 1. 存在一个类中
    • 2. 存在不同的类中

Spring版本:5.0.6

多个处理器的两种情况

1. 存在一个类中

@RestControllerAdvice
public class ExceptionHandle {
    @ExceptionHandler(Exception.class)
    public Object handle(Exception e){
        e.printStackTrace();
        HashMap<String, Object>  map = new HashMap<>();
        map.put("location", "exception");
        map.put("msg", e.getMessage());
        map.put("localMsg", e.getLocalizedMessage());
        return map;
    }
    @ExceptionHandler(MyException.class)
    public Object handle(MyException e){
        e.printStackTrace();
        HashMap<String, Object>  map = new HashMap<>();
        map.put("location", "myException");
        map.put("msg", e.getMessage());
        map.put("localMsg", e.getLocalizedMessage());
        return map;
    }
    @ExceptionHandler(WantException.class)
    public Object handle(WantException e){
        e.printStackTrace();
        HashMap<String, Object>  map = new HashMap<>();
        map.put("location", "want-to-exception");
        map.put("msg", e.getMessage());
        map.put("localMsg", e.getLocalizedMessage());
        return map;
    }
}

调试源码可见匹配顺序为:异常层级高者优先!再清楚点,子类异常处理器优先
源码:

在这里插入图片描述

在这里插入图片描述

2. 存在不同的类中

在这里插入图片描述

源码可见

在这里插入图片描述

通过以上代码可以看到与多个异常处理类放入LinkedHashMap的顺序有关,那么,这个放入的顺序是什么呢?继续看源码:

在这里插入图片描述

此处对异常处理类进行了排序,排序逻辑继续源码:

在这里插入图片描述

此处看到可以利用Order指定顺序,如果没有,则默认最小顺序;

那么,如果都没有指定顺序的话,那就是list中的顺序,源码:

在这里插入图片描述

获取所有的beanDefinitionNames,再遍历寻找标注了异常处理注解的类,放入list中(存在父容器的合并后再遍历寻找)
。。。待更新

到此这篇关于SpringBoot全局异常处理之多个处理器匹配顺序的文章就介绍到这了,更多相关SpringBoot多个处理器匹配顺序内容请搜索3672js教程以前的文章或继续浏览下面的相关文章希望大家以后多多支持3672js教程!

您可能感兴趣的文章:
  • SpringBoot配置全局异常处理器捕获异常详解
  • Springboot容器级后置处理器BeanDefinitionRegistryPostProcessor
  • springboot+mybatis+枚举处理器的实现
  • SpringBoot配置GlobalExceptionHandler全局异常处理器案例
  • SpringBoot实现全局异常处理方法总结
  • Springboot全局异常捕获及try catch区别解析
相关栏目:

用户点评