杰克逊包括用户设置的空值?
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
我正在使用 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