Как обрабатывать исключения, выброшенные из всех HandlerMethodArgumentResolvers? - PullRequest
0 голосов
/ 28 февраля 2019

Я использую весеннюю загрузку 2.1.2

Я пытаюсь обработать все исключения, которые выбрасываются из всего HandlerMethodArgumentResolver (в обычном и обычном режиме).

Моя цельобработать эти исключения, чтобы вернуть определенный JSON с кодом состояния 400.

Проблема здесь в том, что Spring ничего не делает с исключениями, которые выдают обработчики (например, перехватывает их изатем выдать конкретное исключение).

Лучшее, что я мог сделать, это создать ExceptionHandler

@ControllerAdvice
class ExceptionHandlers {

  @ExceptionHandler(MissingServletRequestParameterException.class)
  public final ResponseEntity<ApiError> missingArgument(Exception cause, WebRequest request) {
  ....
  }

  @ExceptionHandler(NumberFormatException.class)
  public final ResponseEntity<ApiError> missingArgument(Exception cause, WebRequest request) {
  ....
  }

  @ExceptionHandler(JsonParseException.class)
  public final ResponseEntity<ApiError> missingArgument(Exception cause, WebRequest request) {
  ....
  }

  ....
}

, но у меня есть три проблемы здесь

1) многошаблон, все методы делают то же самое

2) Я не хочу знать, какие исключения могут быть выброшены из обработчиков аргументов, я хочу, чтобы все они, независимо от того, какой именно.Этот вид кода будет очень сложно поддерживать в актуальном состоянии.

3) и самое худшее, я не могу сказать, что, например, JsonParseException - это неверный запрос.Эти исключения могут быть получены откуда-то еще, например, в репозитории MongoDB (mongojack), при чтении ответа в клиенте отдыха или сериализации моих объектов в конвертере сообщений (вывод).

Я попытался создать свой собственный HandlerMethodArgumentResolver иС этим сценарием было легко справиться, потому что я могу выдать конкретное исключение, независимо от того, какую ошибку я получаю от обработчика, но я не могу сделать это со стандартными обработчиками.

Заранее спасибо.

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