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

2022-09-02 14:13:54

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

objectMapper.setSerializationInclusion(Include.NON_EMPTY);

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

"MyObject":{}

以下是我对空对象的含义的可能示例:

class MyClass
{
    String property1 = "";
    Object property2 = null;
}

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

这可能吗?如果是,我如何配置我的对象映射器才能获得所需的行为?


答案 1

忽略空值,例如您可能已初始化 arrayList,但该列表中没有元素。在那段时间里,使用NOT_EMPTY注释来忽略那些空值字段

@JsonInclude(Include.NON_EMPTY)
class Foo
{
  String bar;
}

答案 2

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

您需要使用NON_DEFAULT对类进行注释:

@JsonInclude(NON_DEFAULT)
class MyClass
{
  String property1 = "";
  Object property2 = null;
}

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

新NON_DEFAULT自 2.7 起可用