首页 > 编程语言 > 详细

springboot使用多个@RestControllerAdvice时的拦截顺序

时间:2020-06-07 10:26:09      阅读:1031      评论:0      收藏:0      [点我收藏+]

 

我们的项目中经常会使用到别人的模块,例如我的项目demo,要依赖别人的A模块,以及基础的核心core模块,此时core模块有一个使用了@RestControllerAdvice的类,负责拦截所有的controller异常。

但是呢,他的异常处理不符合我们demo项目的要求,这就导致我们demo项目要重写自己的controller异常拦截。

此时我们可以用的解决异常的方法有三种:

1、使用aop进行切面拦截异常

2、controller每个方法都用try-catch捕获异常

3、增加一个@RestControllerAdvice标注的类,负责处理我们项目的controller异常。

 

我选用第三种方法,但是当我写了个PartControllerAdvice类,指定basePackages为我自己的项目包,依旧还是被core模块的全局异常处理类拦截了。

查资料和找博客发现如果有多个加了@RestControllerAdvice的类,他们会依次加载,遇到异常时,按照类加载顺序进行判断,如果前面的类有能处理这个异常的方法,就给前面的类处理。

我的项目中有两个标注了@RestControllerAdvice的类,core模块的类被先加载,且core模块的异常处理类有个方法专门处理Exception类型的异常,所以我的局部异常处理类始终不执行。

解决方法:

@Order(Ordered.HIGHEST_PRECEDENCE)    使用@Order注解,提高自己的局部异常处理类的加载顺序就行了

 

代码:

技术分享图片

 

 技术分享图片

 

 技术分享图片

 

模拟效果:

 

 

 技术分享图片

 

 

参考文章:https://www.cnblogs.com/code-to-world/p/12779588.html      springboot多个@ControllerAdvice全局异常处理

 

springboot使用多个@RestControllerAdvice时的拦截顺序

原文:https://www.cnblogs.com/chongcheng/p/13058345.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!