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

时间:2016-07-12 06:12:43

标签: java json serialization jackson objectmapper

我正在使用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

}

如何区分用户设置空和默认空值。 在ObjectMapper中有配置吗?

1 个答案:

答案 0 :(得分:1)

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

忽略这一点,你无法通过language-design来区分默认初始化null和用户设置null

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

执行此操作的一种方法是Jackson Filters,它允许您定义在运行时序列化字段的各种条件(您的条件是您的setter-access-state表示该字段是由用户设置的)

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