如何使用 readerForUpdating().readValue 方法强制杰克逊对象映射器忽略非完整字段



我有一个类(杰克逊注释/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();
    }
}

最新更新