3 回答
TA贡献1765条经验 获得超5个赞
您可以尝试在类中使用@Order
or ,如设置多个 @ControllerAdvice @ExceptionHandlers 的优先级中所述。@Priority
MyExceptionHandler
这将使 Spring 有机会使用您的类而不是@SomeLibraryAnnotation
. 但是,在不知道 Spring 在上下文初始化时如何解释其他注释的情况下,这只是一个猜测。
TA贡献1856条经验 获得超11个赞
这些只是 Java 语言规则,即异常不再是unhandled,因为它已由您的其他库处理(在 catch 块中捕获)。你可以做的是在你的库中重新抛出(可能有条件地)另一个捕获原始异常的异常,看看是否@ExceptionHandler
会处理它。这可能不是因为@ExceptionHandler
正在处理 Controller 类中引发的异常。
第二种方法是抛出仅在 @ExceptionHandler 中处理的异常,然后重新抛出它在其他库中处理。
换句话说,您需要选择在哪里处理最初抛出的异常。
第三种方法是使用 AOP 拦截器@AfterThrowing
,或者@Around
然后执行您想要的任何逻辑。
本质:没有办法同时处理两个地方的异常。是否有意义?
TA贡献1812条经验 获得超5个赞
您是否尝试@ExceptionHandler在控制器内部编写代码?喜欢:
@RestController
@RequestMapping("/path")
public class TheController {
@ExceptionHandler(UnsupportedOperationException.class)
public ResponseEntity<?> handleUnsupportedOperationException(UnsupportedOperationException e) {
return ResponseEntity.status(HttpStatus.FORBIDDEN).body(e.getMessage());
}
}
也许这会以更高的优先级拾取和例外。很难回答不知道是什么@SomeLibraryAnnotation...
添加回答
举报