0
我想排除值小於零的所有屬性。傑克遜有一些準備好使用解決方案,或者我應該創建CustomSerializerFactory和BeanPropertyWriter?傑克遜,如何忽略一些值
我想排除值小於零的所有屬性。傑克遜有一些準備好使用解決方案,或者我應該創建CustomSerializerFactory和BeanPropertyWriter?傑克遜,如何忽略一些值
你可以通過使用過濾器來做到這一點 - 它有點冗長,但它做的工作。 首先 - 你需要指定在實體過濾器:
@JsonFilter("myFilter")
public class MyDtoWithFilter { ...}
然後,你需要指定您的自定義過濾器,它會看值:
PropertyFilter theFilter = new SimpleBeanPropertyFilter() {
@Override
public void serializeAsField(Object pojo, JsonGenerator jgen, SerializerProvider provider, PropertyWriter writer) throws Exception {
if (include(writer)) {
if (writer.getName().equals("intValue")) {
int intValue = ((MyDtoWithFilter) pojo).getIntValue();
if (intValue < 0) {
writer.serializeAsField(pojo, jgen, provider);
}
} else {
writer.serializeAsField(pojo, jgen, provider);
}
} else if (!jgen.canOmitFields()) { // since 2.3
writer.serializeAsOmittedField(pojo, jgen, provider);
}
}
@Override
protected boolean include(BeanPropertyWriter writer) {
return true;
}
@Override
protected boolean include(PropertyWriter writer) {
return true;
}
};
這是一個字段做所謂的intValue
,但您可以對所有需要以類似方式積極的字段執行相同操作。
最後,不是你可以編組對象,並測試它的效果:
FilterProvider filters = new SimpleFilterProvider().addFilter("myFilter", theFilter);
MyDtoWithFilter dtoObject = new MyDtoWithFilter();
dtoObject.setIntValue(12);
ObjectMapper mapper = new ObjectMapper();
String dtoAsString = mapper.writer(filters).writeValueAsString(dtoObject);
希望這有助於。