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

 更新时间:2024年03月29日 14:18:06   作者:HJSY  
这篇文章主要介绍了SpringBoot全局异常处理之多个处理器匹配顺序(最新推荐),调试源码可见匹配顺序为:异常层级高者优先,再清楚点,子类异常处理器优先,本文给大家介绍的非常详细,感兴趣的朋友一起看看吧

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多个处理器匹配顺序内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java泛化调用实现原理解析

    Java泛化调用实现原理解析

    泛化调用指的是不依赖服务接口的本地 stub 或代理类,通过统一的参数结构动态调用远程服务方法,本文介绍Java泛化调用实现原理解析,感兴趣的朋友跟随小编一起看看吧
    2025-12-12
  • Java SWT中常见弹出框实例总结

    Java SWT中常见弹出框实例总结

    刚开始写Java工具的小伙伴可能不知道怎么写消息对话框,在这里总结一些常用的几种消息弹出框,下面这篇文章主要给大家介绍了关于Java SWT中常见弹出框的相关资料,需要的朋友可以参考下
    2023-01-01
  • 最简单的Spring Cloud教程第一篇:服务的注册与发现(Eureka)

    最简单的Spring Cloud教程第一篇:服务的注册与发现(Eureka)

    这篇文章主要给大家介绍了关于Spring Cloud服务的注册与发现(Eureka)的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用spring cloud具有一定的参考学习价值,需要的朋友们下面来一起看看吧。
    2017-08-08
  • Java 数据结构与算法系列精讲之单向链表

    Java 数据结构与算法系列精讲之单向链表

    单向链表特点是链表的链接方向是单向的,访问要通过顺序读取从头部开始。链表是使用指针构造的列表,是由一个个结点组装起来的,又称为结点列表。其中每个结点都有指针成员变量指向列表中的下一个结点,head指针指向第一个结点称为表头,而终止于最后一个指向nuLL的指针
    2022-02-02
  • SpringBoot中使用@ControllerAdvice注解详解

    SpringBoot中使用@ControllerAdvice注解详解

    这篇文章主要介绍了SpringBoot中使用@ControllerAdvice注解详解,@ControllerAdvice,是Spring3.2提供的新注解,它是一个Controller增强器,可对controller中被 @RequestMapping注解的方法加一些逻辑处理,需要的朋友可以参考下
    2023-10-10
  • idea中maven本地仓库jar包打包失败和无法引用的问题解决

    idea中maven本地仓库jar包打包失败和无法引用的问题解决

    本文主要介绍了idea中maven本地仓库jar包打包失败和无法引用的问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-06-06
  • java基于Des对称加密算法实现的加密与解密功能详解

    java基于Des对称加密算法实现的加密与解密功能详解

    这篇文章主要介绍了java基于Des对称加密算法实现的加密与解密功能,结合实例形式详细分析了Des加密算法的功能、原理、使用方法与相关注意事项,需要的朋友可以参考下
    2017-01-01
  • JavaScript中的closest方法示例详解

    JavaScript中的closest方法示例详解

    这篇文章主要介绍了JavaScript中closest方法的相关资料,closest()是JavaScript中的一个非常实用的 DOM 方法,用于查找与当前元素匹配的最近的祖先元素,它支持 CSS 选择器,可以应用于事件委托、动态内容处理等场景,需要的朋友可以参考下
    2025-02-02
  • Spring MVC请求参数的传递方式

    Spring MVC请求参数的传递方式

    Spring MVC是一种基于Model-View-Controller(MVC)设计模式的轻量级Web框架,用于Java应用程序的开发,在处理HTTP请求时,Spring MVC会涉及到请求参数的传递,本文给大家介绍了Spring MVC请求参数的传递方式,需要的朋友可以参考下
    2024-10-10
  • spring boot实现过滤器和拦截器demo

    spring boot实现过滤器和拦截器demo

    本篇文章主要介绍了spring boot实现过滤器和拦截器demo ,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-02-02

最新评论