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

2022-09-02 00:15:13

我有一个对象当前被序列化为:

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

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

如何配置 Jackson 以完全不在 json 中包含该对象?

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


答案 1

从 Jackson 2.0.0 (2012 年 3 月 25 日)开始,您还可以使用@JsonInclude注释来控制每个字段或每个类。

public class MyObject {

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

    ...
}

答案 2

这可能是一个很长的机会,但是使用包含并定义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