SpringBoot全局异常处理之多个处理器匹配顺序(最新推荐),
分享于 点击 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区别解析
用户点评