使用@ControllerAdvice同时配置过滤多个包
@controlleradvice同时配置过滤多个包
看代码吧~
//@controlleradvice("com.automvc") //配置过滤一个的时候 @controlleradvice(basepackages={"com.automvc", "com.test"}) //同时配置过滤多个包
springboot 多个@restcontrolleradvice时的拦截顺序
我们的项目中经常会使用到别人的模块,例如我的项目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注解,提高自己的局部异常处理类的加载顺序就行了
代码:
模拟效果:
以上为个人经验,希望能给大家一个参考,也希望大家多多支持。
上一篇: C++ 使用CRC32检测内存映像完整性的实现步骤
下一篇: 深入理解python协程