Я строю REST api весной, и у меня проблемы с обработкой исключений. Я хочу проверить полный запрос и предоставить информацию о полезной нагрузке за один раз.Отмена десериализации Spring Jackson и обработка исключений
Пусть мой объект
public class StubJson {
private BigDecimal bigDecimalField;
@NotEmpty
private String stringField;
public void setBigDecimalField(BigDecimal bigDecimalField) { this.bigDecimalField = bigDecimalField; }
public String setStringField(String stringField) { this.stringField = stringField; }
}
И мой контроллер
@RestController
public class StubController {
@RequestMapping(value = "/stub", method = POST)
public void stub(@Valid @RequestBody StubJson stubJson) {}
}
Проверка этого объекта находится в @ControllerAdvice, который переводит FieldError объекты в переводных ошибки для конечного пользователя.
@ResponseStatus(BAD_REQUEST)
@ResponseBody
@ExceptionHandler(value = MethodArgumentNotValidException.class)
public List<ErrorJson> processValidationError(MethodArgumentNotValidException ex) {}
Если я прохожу в этом формате JSON
{"bigDecimalField": "text", "stringField": ""}
Я хочу, чтобы ответ, как этот
[
{
"field": "stringField",
"message": "Cannot be empty."
},
{
"field": "bigDecimalField",
"message": "Not a number."
}
]
Если я делаю это я получаю
com.fasterxml. jackson.databind.exc.InvalidFormatException
на BigDecimalField, который содержит только информацию о только один раздел. Единственный вариант, который я вижу, это передать его в виде строки или написать специальные аннотации проверки. Есть ли более простой способ достичь этого?
Ваше преобразование объекта не работает даже до того, как оно будет готово к проверке. Для достижения желаемого требуется, чтобы ваш объект был создан из вашего json-запроса успешно – ScanQR