2016-02-27 40 views
0

我需要在通過Jackson ObjectMapper序列化對象時添加@JsonIgnore帶註釋的字段。我知道你可能會讓我從我的課程中刪除@JsonIgnore註釋,但我需要在我的應用程序的某些部分忽略它們。而在我的應用程序的另一部分,我需要在我的json字符串中有這些@JsonIgnore註釋字段。如何在Jackson ObectMapper序列化中添加@JsonIgnore帶註釋的字段

+0

也許考慮使用傑克遜模塊? – fge

回答

4

您可以定義一個SimpleBeanPropertyFilter和FilterProvider。

先給相應的類這樣的自定義過濾器:

@JsonFilter("firstFilter") 
public class MyDtoWithFilter { 

    private String name; 

    private String anotherName; 
    private SecondDtoWithFilter dtoWith; 

    // get set .... 
} 
@JsonFilter("secondFilter") 
public class SecondDtoWithFilter{ 
    private long id; 
    private String secondName; 
} 

,這是你將如何動態序列化你的對象。

ObjectMapper mapper = new ObjectMapper(); 

    // Field that not to be serialised. 
    SimpleBeanPropertyFilter firstFilter = SimpleBeanPropertyFilter.serializeAllExcept("anotherName"); 
    SimpleBeanPropertyFilter secondFilter = SimpleBeanPropertyFilter.serializeAllExcept("secondName"); 

    FilterProvider filters = new SimpleFilterProvider().addFilter("firstFilter", firstFilter).addFilter("secondFilter", secondFilter); 

    MyDtoWithFilter dtoObject = new MyDtoWithFilter(); 
    String dtoAsString = mapper.writer(filters).writeValueAsString(dtoObject); 
+0

謝謝你的回答。如何在serializeAllExcept中添加子字段?我的意思是我有一個班級,這個班級的一個屬性是另一個班級。而且這個班級還有一些應該連載或不連載的字段 – gabby

+0

,那麼在這種情況下,您必須添加完整路徑到您的屬性。 更新上面的答案代碼。快樂編碼! :) – PyThon

+0

不幸的是,它沒有奏效。我仍然可以看到innerProperty2 inb我的JSON字符串。但屬性1不在預期的json中。 – gabby

0

我會建議通過反射來刪除並重新添加它們,當你的具體映射發生時。

0

這表明你有兩個不同的模型與一些共同的元素。我會重新檢查你的模型。

0
public class MainProgram { 
    @JsonFilter("nameRemoveFilter") 
    public static class User{ 

     private String name; 

     private String age; 

     private String password; 

     public String getName() { 
      return name; 
     } 

     public void setName(String name) { 
      this.name = name; 
     } 

     public String getAge() { 
      return age; 
     } 

     public void setAge(String age) { 
      this.age = age; 
     } 

     public String getPassword() { 
      return password; 
     } 

     public void setPassword(String password) { 
      this.password = password; 
     } 



    } 

    public static void main(String[] args) { 
     ObjectMapper mapper = new ObjectMapper(); 
     FilterProvider filters = new SimpleFilterProvider().addFilter("nameRemoveFilter", 
       SimpleBeanPropertyFilter.filterOutAllExcept("name","age")); 
      // and then serialize using that filter provider: 
      User user = new User(); 
      try { 
       String json = mapper.writer(filters).writeValueAsString(user); 
       System.out.println(json); 
      } catch (JsonProcessingException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
    } 


    Works for Latest version of Jackson after 2.0 
相關問題