Я пытаюсь написать простой класс, который будет проверять входную строку JSON, если ее можно преобразовать в целевой объект JAVA. Валидатор должен дать сбой, если во входной строке JSON будет найдено какое-либо неизвестное поле. Все работает, как и ожидалось, за исключением того, что пока я не аннотирую объект B внутри класса A с помощью @JsonUnwrapped
, тогда средство сопоставления объектов будет молча игнорировать неизвестные свойства без сбоев.
Вот мой код:
Класс А:
public class A implements Serializable{
protected String id;
protected String name;
protected @JsonUnwrapped B b;
public A(){
}
public A(String id, String name, B b) {
super();
this.id = id;
this.name = name;
this.b = b;
}
//GETTERS/SETTERS
}
Класс B:
public class B {
protected String innerId;
protected String innerName;
public B(){
}
public B(String innerId, String innerName) {
super();
this.innerId = innerId;
this.innerName= innerName;
}
//GETTERS/SETTERS
}
Класс валидатора:
public class JsonValidator{
public boolean validate(){
ObjectMapper mapper = new ObjectMapper();
//mapper.configure(DeserializationFeature.UNWRAP_ROOT_VALUE, true);
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, true);
try {
mapper.enable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
A a = mapper.readValue(
JsonValidatorBean.class.getResourceAsStream("sample.json"),
A.class);
} catch (JsonParseException e) {
e.printStackTrace();
} catch (JsonMappingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
JSON для проверки:
{
"id": "aaaa",
"naome": "aaa",
"innerId" : "bbbb",
"innerName" : "bbb"
}
Я использую Jackson 2.1. Я ожидаю, что этот код не будет работать с неизвестным свойством "naome", но это не так, он просто игнорируется. Если я удалю @JsonUnwrapped
и адаптирую Json к внедренному объекту, приведенный выше код завершится ошибкой.
Любые идеи?