2

我正在使用 Jersey 和 Jackson2 开发一个 Restful API。我们在开发 PUT 方法时遇到了问题。我们的 PUT 方法有点像 PATCH 方法。它只会更新请求正文中收到的属性。

我正在使用 ObjectMapper.readerForUpdating() 方法进行对象合并。但是这种方法只支持一级合并。例如:我有一个现有的 JSON 对象

{
  "a": "this is a",
  "b": "this is b",
  "c": {
    "x": 1,
    "y": 2
  }
}

然后我收到一个 JSON 对象喜欢

{
  "a": "this is a new a",
  "c": {
    "x": 3
  }
}

我希望合并的对象应该是这样的:

{
  "a": "this is a new a",
  "b": "this is b",
  "c": {
    "x": 3,
    "y": 2
  }
}

但结果是

{
  "a": "this is a new a",
  "b": "this is b",
  "c": {
    "x": 3,
    "y": null
  }
}

第一级属性正确合并。但是对于深层次,它是在做对象替换。有没有办法进行深度合并?

4

2 回答 2

1

此时,您必须自己手动遍历 JSON 树 ( JsonNode) 并更新属性。可能有基于 Jackson 的扩展库提供对此的支持,但核心 Jackson 数据绑定仅具有单个(根 JSON 对象)级别的“浅”合并。

于 2016-01-26T22:18:07.900 回答
-1

我正在浏览 jackson-databind(com.fasterxml.jackson.core) v 2.11 的 @JsonMerge 的文档,发现他们已经开始支持深度合并。但是我还没有尝试过使用它。

于 2020-06-11T09:44:19.400 回答