3 回答

TA貢獻1765條經(jīng)驗 獲得超5個贊
您可以嘗試在類中使用@Order
or ,如設(shè)置多個 @ControllerAdvice @ExceptionHandlers 的優(yōu)先級中所述。@Priority
MyExceptionHandler
這將使 Spring 有機會使用您的類而不是@SomeLibraryAnnotation
. 但是,在不知道 Spring 在上下文初始化時如何解釋其他注釋的情況下,這只是一個猜測。

TA貢獻1856條經(jīng)驗 獲得超11個贊
這些只是 Java 語言規(guī)則,即異常不再是unhandled,因為它已由您的其他庫處理(在 catch 塊中捕獲)。你可以做的是在你的庫中重新拋出(可能有條件地)另一個捕獲原始異常的異常,看看是否@ExceptionHandler
會處理它。這可能不是因為@ExceptionHandler
正在處理 Controller 類中引發(fā)的異常。
第二種方法是拋出僅在 @ExceptionHandler 中處理的異常,然后重新拋出它在其他庫中處理。
換句話說,您需要選擇在哪里處理最初拋出的異常。
第三種方法是使用 AOP 攔截器@AfterThrowing
,或者@Around
然后執(zhí)行您想要的任何邏輯。
本質(zhì):沒有辦法同時處理兩個地方的異常。是否有意義?

TA貢獻1812條經(jīng)驗 獲得超5個贊
您是否嘗試@ExceptionHandler在控制器內(nèi)部編寫代碼?喜歡:
@RestController
@RequestMapping("/path")
public class TheController {
@ExceptionHandler(UnsupportedOperationException.class)
public ResponseEntity<?> handleUnsupportedOperationException(UnsupportedOperationException e) {
return ResponseEntity.status(HttpStatus.FORBIDDEN).body(e.getMessage());
}
}
也許這會以更高的優(yōu)先級拾取和例外。很難回答不知道是什么@SomeLibraryAnnotation...
添加回答
舉報