Джексон: как опустить поле внутри вложенного объекта - PullRequest
0 голосов
/ 01 июля 2018

У меня есть pojo-подобный объект со следующей структурой:

@JsonFilter("MyFilter")
public MyDTO {
   public int id;
   public List<MyNestedDTO> nestedDTO;

   public MyNestedDTO {
       public int id;
       public String name;

       ... 
   }

   ...
}

Я хочу полностью опустить поле имени в сериализованном выводе. Я использую SimpleBeanPropertyFilter так:

ObjectMapper mapper = new ObjectMapper();
PropertyFilter columnFilter = new SimpleBeanPropertyFilter() {
   @Override
   public void serializeAsField(Object pojo, JsonGenerator jgen, SerializerProvider provider, PropertyWriter writer)
   throws Exception {
      if (include(writer)) {
         if (writer.getName().equalsIgnoreCase("nestedDTO")) {
                        return;
         }
         writer.serializeAsField(pojo, jgen, provider);
      } else if (!jgen.canOmitFields()) {
         writer.serializeAsOmittedField(pojo, jgen, provider);
      }
   }
   ...
};
FilterProvider filters = new SimpleFilterProvider().addFilter("MyFilter", columnFilter);

String result = mapper.writer(filters).writeValueAsString(MyDTOObj);

Я вижу, что не могу уловить момент сериализации поля nestedDTO.name этой реализацией serializeAsField(). Объясните мне, как я могу получить это, пожалуйста.

1 Ответ

0 голосов
/ 01 июля 2018

Если вы хотите пропустить сериализацию / десериализацию поля, просто пометьте его @JsonIgnore:

public MyDTO {
   public int id;
   public List<MyNestedDTO> nestedDTO;

   public MyNestedDTO {
       public int id;
       @JsonIgnore
       public String name;

       ... 
   }

   ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...