@JsonUnwrapped отключает свойства fail_on_unknown Джексона

Я пытаюсь написать простой класс, который будет проверять входную строку 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 к внедренному объекту, приведенный выше код завершится ошибкой.

Любые идеи?


person ufasoli    schedule 16.04.2013    source источник


Ответы (1)


Да, это верное утверждение. Из-за логики, необходимой для передачи развернутых свойств из родительского контекста, нет способа эффективно проверить, какие свойства могут быть законно сопоставлены с дочерними POJO (те, которые развернуты), а какие нет.

Существует RFE, чтобы попытаться улучшить вещи, чтобы поймать неотображаемые свойства, но текущие версии (до 2.2 включительно) не могут одновременно выполнять развертывание и защищать от неотображаемых свойств.

person StaxMan    schedule 16.04.2013