我正在使用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
}
我希望如果String s
是null
,整个属性A
都没有被序列化。也就是说,如果String s
是null
,我希望输出为:{"myClass":{"i":10}}
但我得到{"myClass":{"A":{},"i":10}}
作为输出。
我已经设置了NON_EMPTY
用于序列化包含(mapper.setSerializationInclusion(JsonInclude.Include.NON_EMPTY)
),但它没有解决问题
AFAIK你不能用标准注释做到这一点,但是以这种方式改变MyClass.getA()
方法你应该这样做。
public A getA() {
if (a.getS() == null)
return null;
return a;
}
你只需添加@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonInclude(JsonInclude.Include.NON_NULL)
public class MyClass extends Serializable {
private A a;
private int i;
//getters and setters
}
public class A extends Serializable{
private String s;
//getters and setters
}
在期望的班级中生成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}}