Java 如果顶级字段的所有嵌套字段都为空,则Jackson将忽略顶级字段的序列化

Java 如果顶级字段的所有嵌套字段都为空,则Jackson将忽略顶级字段的序列化,java,serialization,jackson,Java,Serialization,Jackson,我正在使用Jackson ObjectMapper序列化POJO。我在POJO中嵌套了字段。例如:序列化类MyClass public class MyClass { private A a; private int i; //getters and setters } public class A { private String s; //getters and setters } 如果字符串s为null,则整个属性A不会序列化。也就是说,如果字符

我正在使用Jackson ObjectMapper序列化POJO。我在POJO中嵌套了字段。例如:序列化类
MyClass

public class MyClass {
    private A a;
    private int i;
    //getters and setters
}

public class A {
    private String s;
    //getters and setters
}
如果字符串
s
null
,则整个属性
A
不会序列化。也就是说,如果字符串
s
null
,我希望输出为:
{“myClass”:{“i”:10}

但是我得到了
{“myClass”:{“A”:{},“I”:10}}
作为输出


我已经为序列化包含设置了
NON\u EMPTY
mapper.setSerializationInclusion(JsonInclude.Include.NON\u EMPTY)
),但这并不能解决问题,因为你不能用标准注释来实现这一点,但用这种方式更改
MyClass.getA()
方法,你应该做到这一点

  public A getA() {
    if (a.getS() == null)
      return null;
    return a;
  }

只需添加@JsonInclude(JsonInclude.Include.NON_NULL)

在所需类中生成
hashCode()
equals()

public class A  extends Serializable{
    private String s;
    // getters and setters
    // hashCode() and equals()
}
在父类中设置一个
Include.CUSTOM

@JsonInclude(value = Include.CUSTOM, valueFilter = A.class)
public class MyClass extends Serializable {
    private A a;
    private int i;
    //getters and setters
}

所有空对象都将被排除,输出将是:
{“myClass”:{“i”:10}

的可能重复项我不认为这个问题是重复的,因为它涉及嵌套对象。所引用的问题无法解决此问题,并且解决方案也不够。是否扩展
接口
@JsonInclude(value = Include.CUSTOM, valueFilter = A.class)
public class MyClass extends Serializable {
    private A a;
    private int i;
    //getters and setters
}