2014-05-13 32 views
1

我有一個包含大量布爾字段的bean。我只想將那些具有真值的字段添加到json中以保存一些有效載荷。這是一項功能,應基於客戶的需求,因此必須以動態的方式完成。我不認爲註釋會起作用,因爲它們是靜態的東西。對此有何想法?如何在Jackson中序列化時忽略運行時的字段

回答

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

感謝。這正是我所期待的。 – Edmond

相關問題