我有一个课(省略了杰克逊的注解/获取器/设置器/等):
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
那样覆盖不为null的字段,所以更新后的对象看起来像这样:
[Sample: name = "one", value = 3]
[不幸的是,我无法编辑我的课程和杰克逊注释,所以我需要以某种方式更改我的映射器的配置。请问这是一种方法吗?
readerForUpdating
方法背后的想法不是创建对象的新实例,只是将传递的对象的值替换为对象以进行更新。
我有同样的问题,只想替换不为null的值,但是要做到这一点,我需要隔离ObjectMapper并将其配置为不传输null值,将其与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();
}
}