使用@ControllerAdvice同時配置過濾多個包
@ControllerAdvice同時配置過濾多個包
看代碼吧~
//@ControllerAdvice("com.automvc") //配置過濾一個的時候 @ControllerAdvice(basePackages={"com.automvc", "com.test"}) //同時配置過濾多個包
springboot 多個@RestControllerAdvice時的攔截順序
我們的項目中經(jīng)常會使用到別人的模塊,例如我的項目demo,要依賴別人的A模塊,以及基礎的核心core模塊,此時core模塊有一個使用了@RestControllerAdvice的類,負責攔截所有的controller異常。
但是呢,他的異常處理不符合我們demo項目的要求,這就導致我們demo項目要重寫自己的controller異常攔截。
此時我們可以用的解決異常的方法有三種:
1、使用aop進行切面攔截異常
2、controller每個方法都用try-catch捕獲異常
3、增加一個@RestControllerAdvice標注的類,負責處理我們項目的controller異常。
我選用第三種方法,但是當我寫了個PartControllerAdvice類,指定basePackages為我自己的項目包,依舊還是被core模塊的全局異常處理類攔截了。
查資料和找博客發(fā)現(xiàn)如果有多個加了@RestControllerAdvice的類,他們會依次加載,遇到異常時,按照類加載順序進行判斷,如果前面的類有能處理這個異常的方法,就給前面的類處理。
我的項目中有兩個標注了@RestControllerAdvice的類,core模塊的類被先加載,且core模塊的異常處理類有個方法專門處理Exception類型的異常,所以我的局部異常處理類始終不執(zhí)行。
解決方法:
@Order(Ordered.HIGHEST_PRECEDENCE) 使用@Order注解,提高自己的局部異常處理類的加載順序就行了
代碼:
模擬效果:
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
使用Spring Data Jpa的CriteriaQuery一個陷阱
使用Spring Data Jpa的CriteriaQuery進行動態(tài)條件查詢時,可能會遇到一個陷阱,當條件為空時,查詢不到任何結果,并不是期望的返回所有結果。這是為什么呢?2020-11-11java多線程并發(fā)executorservice(任務調度)類
這篇文章主要介紹了線程并發(fā)ScheduledExecutorService類,設置 ScheduledExecutorService ,2秒后,在 1 分鐘內每 10 秒鐘蜂鳴一次2014-01-01Java協(xié)程編程之Loom項目實戰(zhàn)記錄
這篇文章主要介紹了Java協(xié)程編程之Loom項目嘗鮮,如果用嘗鮮的角度去使用Loom項目,可以提前窺探JVM開發(fā)者們是如何基于協(xié)程這個重大特性進行開發(fā)的,這對于提高學習JDK內核代碼的興趣有不少幫助,需要的朋友可以參考下2021-08-08