【发布时间】: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