如何使用readerForUpdating()。readValue方法强制Jackson对象映射器忽略不完整的字段

问题描述 投票:1回答:1

我有一个课(省略了杰克逊的注解/获取器/设置器/等):

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]

[不幸的是,我无法编辑我的课程和杰克逊注释,所以我需要以某种方式更改我的映射器的配置。请问这是一种方法吗?

java jackson mapper
1个回答
0
投票

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();
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.