2015-07-21 52 views
0

[不重複]。如何告訴傑克遜忽略字段,因爲該字段沒有條件爲空?

我需要JsonIgnore正好相反。在我的用例中,只有一個字段需要在序列化中添加,而其他所有字段都將被忽略。我探索了@JsonSerialize,@JsonInclude和@JsonProperty,但沒有按我的要求工作。

有沒有辦法實現這一點,或者我需要用@JsonIgnore來標記要忽略的字段?

+0

做什麼?也許重複的[這個問題](http://stackoverflow.com/questions/22668374/jackson-serialize-only-marked-fields) – boly38

回答

2

默認情況下,傑克遜會自動探測出你的對象中的所有getter和序列化他們的價值觀。傑克遜區分「正常」getters(以「get」開頭)和「is-getters」(以「is」開頭,布爾值)。您可以通過配置ObjectMapper這樣禁用自動檢測兩個完全:

ObjectMapper mapper = new ObjectMapper(); 
mapper.disable(MapperFeature.AUTO_DETECT_GETTERS); 
mapper.disable(MapperFeature.AUTO_DETECT_IS_GETTERS); 

或者,您也可以禁用每個階級基礎使用@JsonAutoDetect上的自動檢測。註釋您實際上想用@JsonProperty序列化的字段或獲取者。

@JsonAutoDetect(getterVisibility = JsonAutoDetect.Visibility.NONE, 
       isGetterVisibility = JsonAutoDetect.Visibility.NONE) 
public class MyObject { 

    private String foo; 

    @JsonProperty("bar") 
    private String bar; 

    private boolean fubar; 

    public MyObject(String foo, String bar, boolean fubar) { 
     this.foo = foo; 
     this.bar = bar; 
     this.fubar = fubar; 
    } 

    public String getFoo() { 
     return foo; 
    } 

    public String getBar() { 
     return bar; 
    } 

    public boolean isFubar() { 
     return fubar; 
    } 

} 

序列化MyObject這樣的:

mapper.writeValueAsString(new MyObject("foo", "bar", true)); 

會導致以下JSON你想 「@expose」 只相當於GSON

{"bar":"bar"} 
+0

非常感謝。這工作。現在唯一的問題是,無論如何,布爾變量都會被序列化。 – Natasha

+0

你說得對。請參閱我更新的答案以解決此問題。 – hzpz

+0

這是有效的。謝謝 – Natasha

0

你可以試試這個@JsonIgnoreProperties(「PROPERTYNAME」)可變的頂部..