У меня проблемы с созданием правильных сообщений об ошибках с Spring и Jackson. Сценарий: контроллер с пользовательской моделью @ResponseBody
(см. Ниже) модель с двумя атрибутами, которая может привести к ошибкам синтаксического анализа. Теперь я хочу вернуть правильное сообщение об ошибке, если синтаксический разбор этих полей завершился неудачно (например, получен неверный номер для Date
).Обработка ошибок с Spring и Jackson
Если произошла ошибка синтаксического анализа, Spring поймает ее и возвращает ответ 400 Bad Request
с телом HTML. Хотя я могу реализовать свой собственный HandlerExceptionResolver
, который улавливает это исключение для генерации значимого сообщения об ошибке. К сожалению, я могу только поймать первую ошибку синтаксического анализа, а не, возможно, вторую.
Итак, есть ли способ собрать все ошибки разбора/десериализации и создать правильное сообщение об ошибке со всеми проблемами?
Я использую Jackson 1.7.1 и Spring 3.2.2.
Некоторые примеры кода:
TimeController.java
@Controller
@RequestMapping("/time")
public class TimeController {
@RequestMapping(method = RequestMethod.POST)
public @ResponseBody
TimeDocument create(@RequestBody TimeDocument entity) {
// magic
return entity;
}
}
TimeDocument.java
public class TimeDocument {
public String name;
public Date date1;
public Date date2;
}
Просьба 1: Я получу 200 OK
.
{
"name": "test",
"date1": 123,
"date2": 1234
}
Запрос 2: я получу 400 Bad Request
, но я в состоянии генерировать соответствующее сообщение об ошибке, как: «Дата 1 имеет неверный формат».
{
"name": "test",
"date1": "crap",
"date2": 1234
}
Запрос 3: Я получаю 400 Bad Request
, но я не в состоянии генерировать соответствующее сообщение об ошибке, как: «Дата 1 имеет недопустимый формат дата 2 имеет неверный формат..».
{
"name": "test",
"date1": "crap",
"date2": "crap"
}
Поскольку я не нашел подходящего решения, все же, я собираюсь найти другой способ решить мою проблему. (например, вторая проверка клиента) – svenwltr