2012-01-17 73 views
18

發送一個空的集合我有一個curently被序列化對象:如何不傑克遜

{ 
    "label" : "label", 
    "proxyIds" : [ ], 
    "childIds" : [ 161, 204, 206, 303, 311 ], 
    "actionIds" : [ 157, 202 ], 
} 

這proxyIds是Java對象空(NOT NULL)集合。

我該如何配置傑克遜在json中根本不包含該對象?

我想要的行爲類似於xml/soap中的「unwrapped」集合,如果集合是空的,它不包括在內。我不需要區分空集合和空集合,並希望減小json有效負載的大小。

回答

13

這可能是一個長鏡頭,但如何使用包含並將NON_DEFAULT定義爲包含屬性。該文檔說:

「值表示只包含具有與默認設置不同的值的屬性(表示使用無參參數構造函數構造Bean時的值)。

所以如果默認值是一個空數組,它應該跳過它。

喜歡的東西:

ObjectMapper mapper = new ObjectMapper(); 
mapper.getSerializationConfig().setSerializationInclusion(Inclusion.NON_DEFAULT); 


public class Test { 
    String[] array = { }; 
    .... 
} 

http://jackson.codehaus.org/1.1.2/javadoc/org/codehaus/jackson/map/annotate/JsonSerialize.Inclusion.html

+0

'String [] array =「」;'不是有效的代碼 - 你寫什麼意思? –

+0

修正了,本質上想把默認值設置爲空數組。 –

+0

請注意,自從傑克遜2.0,這樣做的方式是'mapper.setSerializationInclusion(Include.NON_DEFAULT);' –

34

由於傑克遜2.0.0(25-MAR-2012),你也可以使用@JsonInclude annotation來控制這種對每個場或每類基礎。

public class MyObject { 

    @JsonInclude(Include.NON_EMPTY) 
    private List<Integer> proxyIds; 

    ... 
} 
+0

恕我直言,這應該是正確的答案。但我覺得值得一提的是,這個註釋也可以用在一個類上。在這種情況下,它適用於所有領域。 – Simon

+2

請注意,NON_DEFAULT是NON_EMPTY的一個子集,您需要哪一個取決於您的需要。如果我記得NON_EMPTY正確,除了數組外,還會刪除空字符串屬性,而NON_DEFAULT則不會。 – molholm