TL; DR: ошибки десериализации перечисления не регистрируются org.springframework.validation.Errors
в контроллере покоя
Для справки: мы еще не нашли чистого решения, так какнаконец решил, что никто не должен называть нас безумным перечислением
У меня есть контроллер покоя, который использует org.springframework.validation.Errors
для проверки параметров:
@RequestMapping(value = "/vol1/frodo")
public ResponseEntity<Object> simpleMethodUsingPost(
HttpServletRequest httpServletRequest,
@Valid @RequestBody MySimpleObject simpleObject,
Errors errors) {
/* If an error occured, I need to log the object */
if (errors.hasErrors()) {
List<FieldError> fields = errors.getFieldErrors();
doSomething(fields , simpleObject);
}
}
Мой класс MySimpleObject
выглядит так:
public class MySimpleObject {
@Valid
@NotNull(message = "anObjectField is a mandatory field")
private EmbeddedObject anObjectField = null;
@Valid
@NotNull(message = "aStringField is a mandatory field")
private String aStringField = null;
@Valid
private MySimpleEnum aSimpleEnum = null;
}
И мой перечислимый класс MySimpleEnum
в основном представляет собой класс с двумя значениями:
public enum MySimpleEnum{
ORC("ORC"),
URUK("URUK");
private String value;
MySimpleEnum(String value) {
this.value = value;
}
@Override
public String toString() {
return String.valueOf(value);
}
}
Проверка этого объекта (и внедрение ошибокв Springframework Error
объект) хорошо работает, когда он находится на String
или Object
, но он не пройдет валидацию enum
(следовательно, объект, содержащий перечисление с допустимым аннотированием, тоже потерпит неудачу).
Сбой при попытке привести JSON String
к перечислению, когда значение недопустимо:
org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error:
Cannot deserialize value of type 'lotr.middleearth.model.MySimpleEnum' from String "HOBBIT"
Эта ошибка десериализации обнаруживается, если я использую ResponseEntityExceptionHandler
и переопределяю handleHttpMessageNotReadable
но у меня нет доступа к другим параметрам и я не могу использоватьих.
Как настроить Validator , enum или Springframe Error , чтобы это исключение было перехвачено и использовано в моем теле контроллера