51

私には2つのエンティティがあります:

Parent {
   Child[] children;
}

and 

Child {
   Parent parent;
}

私はとについて知ってい@JsonBackReferenceます@JsonManagedReference。のインスタンスをシリアル化する場合、それらは適切ですParent

ただし、のインスタンスを転送する必要があり、フィールドにデータを入力Childしたいと思います。parent

言い換えると:

  1. シリアル化Parentするとchildren、その親フィールドは空になる可能性があります(json参照アノテーションを使用して解決できます)。
  2. シリアル化の際には、それらを使用Childする必要があります(ただし、入力する必要はありません。parentchildrenchildrenparent

標準のジャクソン機能を使用してそれを解決する方法はありますか?

つまり、フィールドをシリアル化に適格または非適格としてマークする代わりに、すでにシリアル化されているエンティティのシリアル化をスキップします。

4

2 に答える 2

46

Jackson 2.0 は完全な循環オブジェクト参照をサポートしています。例については、 「Jackson 2.0 がリリースされました」(セクション「任意のオブジェクト グラフ、さらには循環グラフを処理する!」) を参照してください。

基本的に、@JsonIdentityInfoid/idref スタイルの処理が必要な型には new を使用する必要があります。あなたの場合、これは両方ParentChildタイプになります(一方が他方を拡張する場合は、それをスーパータイプに追加するだけで問題ありません)。

于 2012-04-09T17:21:24.123 に答える
30

非常に便利なインターフェイスの実装は、jackson 2 ライブラリで次のように提供されます。

@Entity
@JsonIdentityInfo(generator=ObjectIdGenerators.PropertyGenerator.class, property="id")
public class Parent { ....

@Entity
@JsonIdentityInfo(generator=ObjectIdGenerators.PropertyGenerator.class, property="id")
public class Child { ....

Mavenで

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-core</artifactId>
    <version>2.0.2</version>
</dependency>

@StaxManは、開始するための素敵なリンクを提供しました

于 2015-03-07T01:21:02.427 に答える