如何从Jackson ObjectMapper中排除空对象?

Mat*_*sch 13 java serialization json jackson

基本上我不希望任何空的JSON数组或对象显示在我生成的JSON文件中.我已经使用以下方法相应地配置了我的ObjectMapper:

objectMapper.setSerializationInclusion(Include.NON_EMPTY);
Run Code Online (Sandbox Code Playgroud)

这适用于数组,集合和字符串.但是,如果我有一个空对象(=所有属性为null或为空),它仍将显示在生成的JSON中,如下所示:

"MyObject":{}
Run Code Online (Sandbox Code Playgroud)

这是我对空对象的一个​​可能的例子:

class MyClass
{
    String property1 = "";
    Object property2 = null;
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我希望从生成的JSON文件中完全排除对象.

这可能吗?如果是,我如何配置我的ObjectMapper以获得所需的行为?

Gen*_*e S -2

自从提出这个问题以来已经有几年了,但我点击此页面寻找解决方案。所以就是这样。

您需要使用 NON_DEFAULT 注释您的类:

@JsonInclude(NON_DEFAULT)
class MyClass
{
  String property1 = "";
  Object property2 = null;
}
Run Code Online (Sandbox Code Playgroud)

正如文档中明确指出的那样,全局配置是不够的: http://fasterxml.github.io/jackson-annotations/javadoc/2.7/com/fasterxml/jackson/annotation/JsonInclude.Include.html#NON_DEFAULT

新的 NON_DEFAULT 从 2.7 开始可用

  • 在我的情况下不起作用。如果带注释的对象由 bean 持有并序列化,它仍然是 {"myClassObject": {}} 而不是 {} (2认同)