【问题标题】:Jackson: how to omit field inside nested object杰克逊:如何省略嵌套对象内的字段
【发布时间】:2018-12-10 02:15:15
【问题描述】:

我有一个类似 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);

我看到我无法通过这个serializeAsField() 实现来捕捉nestedDTO.name 字段序列化的时刻。请告诉我如何获得它。

【问题讨论】:

    标签: java spring serialization jackson filtering


    【解决方案1】:

    如果您想跳过字段的序列化/反序列化,只需使用 @JsonIgnore 进行注释即可:

    public MyDTO {
       public int id;
       public List<MyNestedDTO> nestedDTO;
    
       public MyNestedDTO {
           public int id;
           @JsonIgnore
           public String name;
    
           ... 
       }
    
       ...
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-01-14
      • 2016-12-07
      • 2019-11-15
      • 2022-06-22
      • 1970-01-01
      • 2021-04-12
      • 2021-10-02
      相关资源
      最近更新 更多