9

こんにちは(私の英語でごめんなさい)

SPRING MVCでjsonを生成するWebサービスを使用するangularjsフロントエンドWebサイトに取り組んでいます。spring mvc はシリアライゼーションに JsonIdentityInfo オプションを使用するため、各オブジェクトは json に 1 回だけ書き込まれ、参照が使用されるたびに書き込まれます。たとえば、同じオブジェクト「コンポーネント」を使用する 2 つの「コンピューター」があるため、Spring は ID を配置します。最初のコンポーネント ("@componentID": 2) および 2 番目のコンポーネントの場合は id ( 2 ) :

[
  {
    "@computerID": 1,
    "component": {
      "@componentID": 2,
      "processor": 2,
      "ram": "8g",
      "harddrive": "wd"
    }
  },
  {
    "@computerID": 3,
    "component": 2
  }
]

私が欲しいもの:

[
  {
    "@computerID": 1,
    "owner" : "Mister B",
    "component": {
      "@componentID": 2,
      "processor": 2,
      "ram": "8g",
      "harddrive": "wd"
    }
  },
  {
    "@computerID": 3,
    "owner" : "Mister A",
    "component": {
      "@componentID": 2,
      "processor": 2,
      "ram": "8g",
      "harddrive": "wd"
    }
  }
]

これを行うコードを何度も検索しましたが、何も見つかりませんでした。

この動作を削除するために Web サービスを編集することはできません。クライアント側で json を javascript または jquery (または別のライブラリ) で編集して、参照を実際の参照オブジェクトに置き換えることはできますか? (データは実際にはより複雑で深く、オブジェクトには 3 レベルのサブオブジェクトがあります)。

どうもありがとう。

4

2 に答える 2

29

私は最近、OPがここで説明した正確なシナリオに出くわしました。以下は私の解決策でした。これを解決するには、JSOG (Javascript Object Graph) 形式を使用します。

サーバー側 Jackson-Jsog プラグインhttps://github.com/jsog/jsog-jackson を使用し、以下の注釈を使用して各クラスに注釈を付けます。

@JsonIdentityInfo(generator=JSOGGenerator.class)

の代わりに

@JsonIdentityInfo(generator = ObjectIdGenerators.IntSequenceGenerator.class, property = "@id")

これは JSOG 形式で生成されます。(@id@ref)

クライアント側では、jsog.jsを使用します

以下の呼び出しを使用して、JSOG 構造を循環構造に変換します。

cyclicGraph = JSOG.decode(jsogStructure);

于 2014-07-10T18:57:11.590 に答える