我正在使用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中有配置吗?
答案 0 :(得分:1)
有些人认为使用null是不好的做法(例如“清洁代码”一书)
忽略这一点,你无法通过language-design来区分默认初始化null和用户设置null
您需要某种状态来跟踪设置者是否已访问某个字段。如果它没有被setter访问并且为null,则忽略它。
执行此操作的一种方法是Jackson Filters,它允许您定义在运行时序列化字段的各种条件(您的条件是您的setter-access-state表示该字段是由用户设置的)
http://www.baeldung.com/jackson-serialize-field-custom-criteria