Jackson 可以用来更新 POJO 吗?

mar*_*gti 6 java jackson

从 JSON 转换为 Java 对象的最通用方法是将 JSON 捕获为Map<String, Object>. 由此(或直接)我可以轻松转换为 POJO:

User user = objectMapper.convertValue(jsonMap, User.class);
Run Code Online (Sandbox Code Playgroud)

原始 JSON 中不存在的任何User字段都将设置为其默认值。虽然这对于创建新对象(响应(例如)API 调用)非常有用,但它不适用于更新POJO。

我想要实现的是使用 Jackson 从传入的 JSON更新现有对象。User这意味着:

  1. 传入 JSON 中的属性(也是 POJO 中的字段)用于更新(覆盖)POJO 中的相应字段。
  2. 传入 JSON 中不是POJO中字段的属性将被忽略。
  3. UserPOJO 中在传入 JSON 中没有任何对应属性的字段将被保留。

这对杰克逊来说可能吗?

Dav*_*INO 5

您可以用来readerForUpdating创建一个ObjectReader

用于构造 ObjectReader 的工厂方法,它将使用 JSON 数据更新给定的对象(通常是 Bean,但也可以是 Collection 或 Map,但不是数组)。

然后readValue使用ObjectReader

使用此读取器的配置绑定从给定 JSON 字符串读取的内容的方法。返回值要么是新构造的,要么是用 指定的根值withValueToUpdate(Object)

在类似于此的代码中:

  ObjectReader objectReader = objectMapper.readerForUpdating(objectToUpdate);
  MyType objectUpdated = objectReader.readValue(inputJson);
Run Code Online (Sandbox Code Playgroud)