Я использую весеннюю загрузку 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 иС этим сценарием было легко справиться, потому что я могу выдать конкретное исключение, независимо от того, какую ошибку я получаю от обработчика, но я не могу сделать это со стандартными обработчиками.
Заранее спасибо.