2

私はJerseyとJackson2を使ってRestful APIを開発しています。PUT メソッドを開発するときに問題が発生します。私たちの PUT メソッドは、PATCH メソッドのようなものです。リクエスト本文で受け取ったプロパティのみを更新します。

オブジェクトのマージを行うために ObjectMapper.readerForUpdating() メソッドを使用しています。ただし、この方法は第 1 レベルのマージのみをサポートします。例: 既存の 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
  }
}

第 1 レベルのプロパティは正しくマージされます。しかし、深いレベルでは、オブジェクトの置換を行っています。ディープマージを行う方法はありますか?

4

2 に答える 2

1

この時点で、手動で JSON ツリー ( JsonNode) をトラバースし、プロパティを更新する必要があります。これをサポートするJackson上に構築された拡張ライブラリがあるかもしれませんが、コアのJacksonデータバインドには、単一(ルートJSONオブジェクト)レベルの「浅い」マージしかありません。

于 2016-01-26T22:18:07.900 に答える