在 Jackson 中,可以在 POJO 上使用 JsonSerialize 注释以防止空对象被序列化 (@JsonSerialize(include=JsonSerialize.Inclusion.NON_NULL))。但是,基元不能设置为 null,因此此注释不适用于诸如未触及且默认为 0 的 int 之类的东西。
是否有一个注释可以让我说“对于这个类,除非它们与默认值不同,否则不要序列化基元”或“对于这个字段,如果它的值为 X,不要序列化它”?
如果您使用的是最新版本的 Jackson,您可以使用JsonInclude.Include.NON_DEFAULT
应该适用于原语的版本。
这种方法的缺点是,将 bean 属性设置为其默认值将不起作用,并且该属性仍然不会被包括在内:
@JsonInclude(Include.NON_DEFAULT)
public class Bean {
private int val;
public int getVal() { return val; }
public void setVal(int val) { this.val = val; }
}
Bean b = new Bean();
b.setVal(0);
new ObjectMapper().writeValueAsString(b); // "{}"
事实是,在 Java 中,类加载器会将所有未初始化的原始属性(int = 0,boolean = false 等)设置为默认值,因此您无法将它们与应用程序明确设置的属性区分开来。在我看来,你有两个选择: