在我的Spring Webflux应用程序中,我有一个@ControllerAdvice
带注释的类,该类实现WebExceptionHandler
,并且其@Order
设置为-2,我的想法是将其作为全局异常处理程序
在此类中,我检查收到的Throwable
的类型并以适当的方式进行处理,如下所示:
@Component
@Slf4j
@Order(-2)
@ControllerAdvice
public class CustomWebExceptionHandler implements WebExceptionHandler {
@Override
public Mono<Void> handle(ServerWebExchange exchange, Throwable ex) {
if (ex instanceof ResponseStatusException) {
... do something
}
if (ex instanceof DomainException) {
... do something else
}
}
在其中一个“ ...做某事”块中,我犯了一个错误,并抛出了IllegalArgumentException
。我以为它将由同一类处理,但最终由DefaultErrorWebExceptionHandler
的{{1}}处理。
我的问题是:可以由我的@Order(-1)
处理此IllegalArgumentException
吗?
答案 0 :(得分:0)
我认为除非您有多个处理程序,否则您无需在此订购。从上面的代码中,我看到您有一个用CustomWebExceptionHandler
注释的ControllerAdvice
。默认情况下,@ControllerAdvice
中的方法全局应用于所有Controller。现在捕获所有被目标控制器抛出的异常,您只需使用@ExceptionHandler
定义一个方法,将throwable作为参数,类似这样的方法将对您有效:
@ControllerAdvice
public class CustomWebExceptionHandler {
@ExceptionHandler
public ResponseEntity handleExceptions(Throwable ex)
{
if (ex instanceof ResponseStatusException) {
... do something
}
if (ex instanceof DomainException) {
... do something else
}
}
}
如果您希望在此处Setting Precedence of Multiple @ControllerAdvice @ExceptionHandlers看到详细的答案,则可以有多个异常处理程序(每个异常)。