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

Mic*_*les 20 java json jackson

我有一个被强制序列化的对象:

{
  "label" : "label",
  "proxyIds" : [ ],
  "childIds" : [ 161, 204, 206, 303, 311 ],
  "actionIds" : [ 157, 202 ],
}
Run Code Online (Sandbox Code Playgroud)

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

如何将Jackson配置为不在json中包含该对象?

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

pim*_*ttc 38

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

public class MyObject {

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

    ...
}
Run Code Online (Sandbox Code Playgroud)

  • 只需注意,NON_DEFAULT是NON_EMPTY的子集,您需要的其中一个取决于您的需要.如果我记得正确的NON_EMPTY除了数组之外还删除了空字符串属性,而NON_DEFAULT则没有. (2认同)

Usm*_*ail 14

这可能是一个长镜头,但如何使用Inclusions和定义NON_DEFAULT作为包含属性.文档说:

"值表示只包含具有与默认设置不同的值的属性(意味着当Bean使用其无参数构造函数构造时具有的值)."

因此,如果默认值为空数组,则应跳过它.

就像是:

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


public class Test {
     String[] array = { };
     ....
}
Run Code Online (Sandbox Code Playgroud)

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

  • 注意,自jackson 2.0以来,这样做的方法是`mapper.setSerializationInclusion(Include.NON_DEFAULT);` (2认同)