杰克逊包括用户设置的空值?

Jackson include null set by user?

我正在使用 jackosn 序列化一个 POJO,我希望用户设置的所有值都必须包含在序列化中,无论它是否为 null。

所以目前:

POJO:

public class YourItem {
    public String key;
    public String item;
}

当前当用户执行时:

YourItem item = new YourItem();
item.setKey("abc");

序列化给出:

{

        "key" : "abc"
}

因为我将 ObjectMapper 配置为 objectMapper.setInclude(Include.NON_NULL)

但是现在如果用户专门调用 setter 并将值设置为 null,那么我希望在我的序列化字符串中包含该项目。 所以如果用户

  YourItem item = new YourItem();
    item.setKey("abc");
    item.setItem(null);

我希望在序列化中同时存在键值和项值,例如:

{

    "key" : "abc",
    "item" : null

}

如何区分 用户集 null 和默认 null。 ObjectMapper 中有配置吗??

有些人认为使用 null 是一种不好的做法(例如《清洁代码》一书)

尽管如此,您无法通过语言设计区分默认初始化 null 和用户设置的 null

您需要某种状态来跟踪某个字段是否已被 setter 访问。如果它还没有被 setter 访问并且为空,则忽略它。

实现此目的的一种方法是 Jackson Filters,它允许您定义在运行时序列化字段的各种条件(您的条件是您的 setter-access-state 表明该字段是由用户)

http://www.baeldung.com/jackson-serialize-field-custom-criteria