Как перехватить все исключения в Spring boot 2 webflux с @ControllerAdvice - PullRequest
0 голосов
/ 06 февраля 2020

Моё приложение сделано 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);
    }
}
...