使用@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註解,提高自己的局部異常處理類的加載順序就行瞭

代碼:

模擬效果:

以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。

推薦閱讀: