Java 如何使用ReaderForUpdate().readValue方法强制Jackson对象映射器忽略未满字段
我有一个类(省略了Jackson注释/getter/setter/etc): 我有一个例子,例如:Java 如何使用ReaderForUpdate().readValue方法强制Jackson对象映射器忽略未满字段,java,jackson,mapper,Java,Jackson,Mapper,我有一个类(省略了Jackson注释/getter/setter/etc): 我有一个例子,例如: 样本样本=新样本(“一个”,空) 我有一个json字符串: {“name”=“two”,“value”=3} 我用json更新对象: ObjectMapper mapper = new ObjectMapper(); mapper.readerForUpdating(sample).readValue(json); 更新我的对象后,如下所示: [Sample: name = "two", val
样本样本=新样本(“一个”,空)
我有一个json字符串:
{“name”=“two”,“value”=3}
我用json更新对象:
ObjectMapper mapper = new ObjectMapper();
mapper.readerForUpdating(sample).readValue(json);
更新我的对象后,如下所示:
[Sample: name = "two", value = 3]
但是我不需要覆盖not null字段,因为名称是,所以更新后的对象如下所示:
[Sample: name = "one", value = 3]
不幸的是,我无法编辑我的类和Jackson注释,所以我需要以某种方式更改映射器的配置。这是一种方法吗?ReaderForUpdate
方法背后的思想不是创建对象的新实例,而是将传递的对象的值替换到对象中进行更新
我也遇到了同样的问题,只想替换不为null的值,但要做到这一点,我需要隔离ObjectMapper并将其配置为不传输null值,这与ReaderForUpdate
方法相结合,实现了我们想要的:
public static void updateModels(Object original,Object data) {
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES,false);
try {
objectMapper.readerForUpdating(original).readValue(objectMapper.writeValueAsBytes(data));
} catch (IOException e) {
e.printStackTrace();
}
}
public static void updateModels(Object original,Object data) {
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES,false);
try {
objectMapper.readerForUpdating(original).readValue(objectMapper.writeValueAsBytes(data));
} catch (IOException e) {
e.printStackTrace();
}
}