我有一個包含大量布爾字段的bean。我只想將那些具有真值的字段添加到json中以保存一些有效載荷。這是一項功能,應基於客戶的需求,因此必須以動態的方式完成。我不認爲註釋會起作用,因爲它們是靜態的東西。對此有何想法?如何在Jackson中序列化時忽略運行時的字段
1
A
回答
2
除了傑克遜的觀點,你可以寫一個custom Jackson filter這將過濾掉所有布爾字段的負值。
下面是一個例子:
public class JacksonFilterBoolean {
@JsonFilter("boolean-filter")
public static class Test {
public final Boolean f1;
public final boolean f2;
public final boolean f3;
public final Boolean fNull = null;
public final String f4 = "string";
public Test(Boolean f1, boolean f2, boolean f3) {
this.f1 = f1;
this.f2 = f2;
this.f3 = f3;
}
}
public static class BooleanPropertyFilter extends SimpleBeanPropertyFilter {
@Override
protected boolean include(BeanPropertyWriter writer) {
return true;
}
@Override
protected boolean include(PropertyWriter writer) {
return true;
}
@Override
public void serializeAsField(Object pojo, JsonGenerator jgen,
SerializerProvider provider, PropertyWriter writer)
throws Exception {
if (writer instanceof BeanPropertyWriter) {
BeanPropertyWriter bWriter = (BeanPropertyWriter) writer;
Class<?> type = bWriter.getType().getRawClass();
if (type == Boolean.class || type == boolean.class) {
Object o = bWriter.get(pojo);
if (o != null && !(boolean) o) {
return;
}
}
}
super.serializeAsField(pojo, jgen, provider, writer);
}
}
public static void main(String[] args) throws JsonProcessingException {
Test t = new Test(true, false, true);
ObjectMapper mapper = new ObjectMapper();
mapper.setFilters(new SimpleFilterProvider().addFilter("boolean-filter",
new BooleanPropertyFilter()));
System.out.println(mapper.writerWithDefaultPrettyPrinter().writeValueAsString(t));
}
}
輸出:
{
"f1" : true,
"f3" : true,
"fNull" : null,
"f4" : "string"
}
0
在Spring的問題跟蹤器中有an issue open for that。
相關問題
- 1. Jackson序列化忽略時區
- 2. 使用Gson或Jackson反序列化JSON時忽略空字段
- 3. 忽略在運行時序列化的一些對象字段(動態忽略)
- 4. 如何在JSON反序列化時忽略某些字段?
- 5. 忽略與Jackson序列化的特定字段
- 6. Jackson - 序列化時變換字段值
- 7. Jackson xml在序列化時忽略空對象
- 8. 使用Jackson CsvMapper序列化POJO時省略字段
- 9. 讓jackson忽略地圖中的字段
- 10. 如何用json/jackson序列化忽略列表根目錄?
- 11. 忽略表單字段以序列化
- 12. 在序列化時忽略DataMember
- 13. 使用C#SDK讀取(反序列化)時忽略字段
- 14. 如何在序列化對象字段和屬性時忽略EmitDefaultValue = false
- 15. 如何告訴JAXB在運行時序列化哪些字段?
- 16. Jackson:避免一些字段的反序列化,但不會忽略它們
- 17. 如何忽略@JsonProperty序列化時,在Java中
- 18. Jackson在將對象序列化到json時包含'class'字段
- 19. 如何在使用Jackson進行反序列化時放寬命名策略?
- 20. Play Framework - 如何忽略Json序列化的某些字段?
- 21. 反序列化時忽略屬性
- 22. 序列化JSON時忽略空值
- 23. 序列化時忽略屬性
- 24. 讓傑克遜忽略當序列化爲json時初始化的字段
- 25. .net序列化:如何選擇性地忽略數據字段
- 26. 如何在通過ObjectMapper序列化類時忽略屬性
- 27. 如何在使用PyYAML序列化對象時忽略成員?
- 28. 如何在序列化json時忽略JsonProperty(PropertyName =「someName」)?
- 29. 如何在序列化對象時忽略事件訂閱者?
- 30. 如何排除Jackson json序列化(Scala)中的字段
感謝。這正是我所期待的。 – Edmond