Моё приложение сделано Spring Boot 2 webflux и thymeleaf, я хочу перехватить все исключения и отобразить ошибку на специальной странице ошибки.
Я использую @ControllerAdvice и @ExceptionHandler для перехвата исключений и обработки ошибки в центральном месте, я могу обрабатывать только все исключения, которые выбрасываются в моем контроллере, но я не могу отловить эти ошибки сопоставления (согласование содержимого и ошибки сопоставления HTTP), такие как UnsupportedMediaTypeStatusException. Я искал и обнаружил, что это известная проблема (https://github.com/spring-projects/sprienter code here
ng-framework / Issues / 21097 # issuecomment-453468295).
Если я использую Web Mvc, такого рода проблемы нет, все исключения могут быть перехвачены. Мой вопрос заключается в том, как перехватить все исключения и показать мою собственную страницу с ошибкой в 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);
}
}