Обработка BindException в приложении SpringBoot с глобальным обработчиком исключений - PullRequest
0 голосов
/ 05 марта 2019

У меня есть контроллер с почтовым запросом.Я пытаюсь проверить POJO с помощью простой аннотации NotNull.Я использую ControllerAdvice для обработки исключений.

@PostMapping("/something")
public MyResponse post(@Valid MyRequest request) {
   // nevermind...
}
public class MyRequest {
  @NotNull
  private Integer something;
  // Getters setters nevermind...
}
@ControllerAdvice
public class RestResponseEntityExceptionHandler extends ResponseEntityExceptionHandler {
    @ExceptionHandler(value = BindException.class)
    protected ResponseEntity<Object> handleBindException(RuntimeException ex, WebRequest request) {
        return handleExceptionInternal(...);
    }
}

Так что я пытаюсь использовать это, но когда я запускаю приложение, я получил следующее:

org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.web.servlet.HandlerExceptionResolver]: Factory method 'handlerExceptionResolver' threw exception; nested exception is java.lang.IllegalStateException: Ambiguous @ExceptionHandler method mapped for [class org.springframework.validation.BindException]: {protected org.springframework.http.ResponseEntity com.liligo.sponsoredads.controller.RestResponseEntityExceptionHandler.handleBindException(java.lang.Exception,org.springframework.web.context.request.WebRequest), public final org.springframework.http.ResponseEntity org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler.handleException(java.lang.Exception,org.springframework.web.context.request.WebRequest) throws java.lang.Exception}

Итак, я хотел бы создать свойсобственный обработчик для BindExceptions, но когда я создаю ExceptionHandler для класса BindException, весеннее приложение не запускается.Если я закомментирую метод handleBindException, приложение запускается, и если возникает BindException, оно просто возвращает 400 и выдает ошибку, но ничего не отправляется обратно в качестве тела ответа.

Что может быть решением для созданияпользовательский обработчик для BindExceptions?

1 Ответ

0 голосов
/ 05 марта 2019

Я обнаружил, что проблема в том, что ResponseEntityExceptionHandler уже имеет метод для обработки исключений BindException.Это означает, что вы не можете "переопределить" обработку исключений для этого.Это также относится ко многим исключениям (см. В классе ResponseEntityExceptionHandler: 106).Поэтому, если вы хотите создать свой собственный обработчик исключений Bind, вам нужно переопределить метод, который обрабатывает его в суперклассе.Это выглядит так:

@Override
    protected ResponseEntity<Object> handleBindException(BindException ex, HttpHeaders headers,
                                                         HttpStatus status, WebRequest request) {
    return handleExceptionInternal(...);
}

С его помощью вы можете вернуть все, что вам нужно.Поэтому я нашел только это решение, если кто-нибудь знает что-нибудь другое, пожалуйста, не стесняйтесь писать здесь:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...