我的应用程序是由 Spring Boot 2 webflux 和 thymeleaf 制作的,我想捕获所有异常并将错误呈现到自定义错误页面。
我使用@ControllerAdvice 和@ExceptionHandler 在一个中心位置捕获异常和处理错误,我只能处理在我的控制器中抛出的所有异常,但我无法捕获那些映射错误(内容协商和HTTP 映射错误),例如UnsupportedMediaTypeStatusException . 我搜索并发现这是一个已知问题(https://github.com/spring-projects/sprienter code here
ng-framework/issues/21097#issuecomment-453468295)。
如果我使用WebMvc,就没有这种问题,所有的异常都可以被捕获。我的问题是如何捕获所有异常并在 webflux 中显示我自己的错误页面。
这是简短的代码:
@ControllerAdvice
@Slf4j
public class DefaultExceptionHandlers {
// works OK for my own thrown exception
@ResponseStatus(HttpStatus.FORBIDDEN)
@ExceptionHandler(value = CustomException1.class)
public Mono<String> handleCustom1Exceptions(CustomException1 e) {
return Mono.just("error1");
}
// works OK for my own thrown exception
@ResponseStatus(HttpStatus.BAD_REQUEST)
@ExceptionHandler(value = CustomException2.class)
public Mono<String> handleCustom2Exceptions(CustomException2 e) {
return Mono.just("error2);
}
// This exception handler is not called at all for the exceptions which are thrown by spring framework
@ResponseStatus(HttpStatus.FORBIDDEN)
@ExceptionHandler(value = Exception.class)
public Mono<String> handleAllExceptions(Exception e) {
return Mono.just("error3);
}
}