可以使用Jackson来更新POJO吗?



将JSON转换为Java对象的最通用方法是将JSON捕获为Map<String, Object>。从这个(或直接)我可以很容易地转换为POJO:

User user = objectMapper.convertValue(jsonMap, User.class);

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

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

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

这对Jackson来说可能吗?

您可以使用readerForUpdating来创建ObjectReader

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

,然后在ObjectReader上使用readValue:

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

在类似的代码中:

ObjectReader objectReader = objectMapper.readerForUpdating(objectToUpdate);
MyType objectUpdated = objectReader.readValue(inputJson);

最新更新