如何不在杰克逊发送空集合

时间:2012-01-17 17:37:28

标签: java json jackson

我有一个对象被巧妙地序列化为:

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

该proxyIds是java对象中的空(非空)集合。

如何配置Jackson根本不在json中包含该对象?

我希望行为类似于xml / soap中的“unwrapped”集合,如果集合为空,则不包括在内。我不需要区分null和empty集合,并希望减小json有效负载的大小。

2 个答案:

答案 0 :(得分:36)

自Jackson 2.0.0(2012年3月25日)以来,您还可以使用@JsonInclude annotation来控制每个字段或每个类别。

public class MyObject {

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

    ...
}

答案 1 :(得分:14)

这可能是一个长镜头,但如何使用Inclusions和定义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