場(chǎng)景描述:
springboot 項(xiàng)目,使用AOP對(duì)特定controller做切片机久,判斷用戶是否登錄臭墨,如未登錄則拋出自定義異常;ControllerAdvice捕獲該未登錄異常膘盖,返回首頁(yè)胧弛。
先說(shuō)結(jié)論:aop中拋出的異常尤误,如果是非RuntimeException的子類,則會(huì)被封裝成UndeclaredThrowableException结缚,在ControllerAdvice中匹配不到聲明的自定義異常损晤。
aop拋異常源碼
第436行用來(lái)判斷該異常是否是該請(qǐng)求contoller方法拋出的,由于該問題中是AOP拋出的異常红竭,所以會(huì)被封裝成UndeclaredThrowableException,這樣在ControllerAdvice則無(wú)法匹配到自定義異常處理邏輯尤勋。
解決方案: AOP中拋出的自定義異常需要繼承RuntimeException.