我有一个类(杰克逊注释/getters/setters/etc被省略(:
public class Sample {
public String name;
public Integer value;
}
我有一个实例,例如:
Sample sample = new Sample("one", null)
,
我有一个 JSON 字符串:
{"name" = "two", "value" = 3}
我用json更新对象:
ObjectMapper mapper = new ObjectMapper();
mapper.readerForUpdating(sample).readValue(json);
更新后,我的对象如下所示:
[Sample: name = "two", value = 3]
但是我不需要像name
那样覆盖非空字段,因此更新后我的对象如下所示:
[Sample: name = "one", value = 3]
不幸的是,我无法编辑我的类和杰克逊注释,所以我需要以某种方式更改我的映射器的配置。这是没有办法做到的?
readerForUpdating
方法背后的思想不是创建对象的新实例,只是将传递对象的值替换到对象中进行更新。
我有同样的问题,只想替换非空值,但要做到这一点,我需要隔离 ObjectMapper 并将其配置为不传输空值,这与 readerForUpdating
方法相结合可以做我们想要的:
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();
}
}