Spring WebExceptionHandler Заказать - PullRequest
0 голосов
/ 21 февраля 2019

В моем приложении 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, который имеет @Order(-1).

Мой вопрос: возможно ли вместо этого IllegalArgumentException быть обработанным моим CustomWebExceptionHandler?

1 Ответ

0 голосов
/ 22 февраля 2019

Я думаю, вам не нужен порядок здесь, если у вас несколько обработчиков.Из приведенного выше кода я вижу, что у вас есть CustomWebExceptionHandler с пометкой ControllerAdvice.По умолчанию методы в @ControllerAdvice применяются глобально ко всем контроллерам.Теперь, чтобы перехватить все исключения , выданные этими целевыми контроллерами , вы можете просто определить метод с @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
           }
        }
    }

Выможет иметь несколько обработчиков исключений (для каждого исключения), если вы хотите увидеть подробный ответ здесь Установка приоритета нескольких @ControllerAdvice @ ExceptionHandlers .

...