我有一个系统,其中显式null字段与 JSON 中不存在的字段不同。用 Java 表示 Jackson 序列化的最佳方式是什么?
例如,我有一个像
class Data {
public String string;
public String other;
}
Run Code Online (Sandbox Code Playgroud)
默认情况下,Jackson 序列化空字段,因此new ObjectMapper().writeValueAsString(new Data())结果为{"string":null,"other":null}. 但是,我希望这会导致{}字段“未设置”。显然,在 Java 中它们为空,但我正在寻找解决方法。
如果我这样做new ObjectMapper().wirteValueAsString(new Data(null, null)),我想这导致{"string":null,"other":null}。并且只有“字符串”字段导致{"string":"value"}.
我现在能想到的唯一方法是为每个字段设置布尔值并使用自定义序列化程序来检查布尔值,但这看起来很混乱。有没有更简单的方法来做到这一点?
编辑:这不是不序列化空值。如果字段显式设置为空,我希望空值被序列化。
我想也许我可以使用 Optionals 和 Include.NON_ABSENT,但不幸的是,这也不起作用,因为 Jackson 将 Optional 引用null视为与Optional.empty().