Java 如果顶级字段的所有嵌套字段都为空,则Jackson将忽略顶级字段的序列化
我正在使用Jackson ObjectMapper序列化POJO。我在POJO中嵌套了字段。例如:序列化类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不会序列化。也就是说,如果字符
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
}