2つのエンティティがあります。
Parent {
Child[] children;
}
and
Child {
Parent parent;
}
私は@JsonBackReference
および@JsonManagedReference
。 Parent
のインスタンスをシリアル化する場合、それらは優れています。
しかし、Child
のインスタンスも転送する必要があり、parent
フィールドに値を設定したいです。
言い換えると:
Parent
のシリアル化では、children
を持つ必要がありますが、その親フィールドは空の場合があります(json参照アノテーションを使用して解決できます)。Child
のシリアル化では、parent
を含むchildren
が必要です(ただし、children
はparent
を設定する必要はありません。標準のジャクソン機能を使用してそれを解決する方法はありますか?
つまりフィールドをシリアル化の対象または非対象としてマークする代わりに、既にシリアル化されたエンティティのシリアル化をスキップします。
Jackson 2.0は、完全な循環オブジェクト参照をサポートします。例については、「 Jackson 2.0リリース 」(「任意のオブジェクトグラフの処理、周期的なグラフでも!」)を参照してください。
基本的に、id/idrefスタイルの処理を必要とする型には、新しい@JsonIdentityInfo
を使用する必要があります。あなたの場合、これはParent
型とChild
型の両方になります(一方がもう一方を拡張する場合は、スーパー型に追加するだけで十分です)。
非常に便利なインターフェイス実装は、jackson 2ライブラリで次のように提供されます。
@Entity
@JsonIdentityInfo(generator=ObjectIdGenerators.PropertyGenerator.class, property="id")
public class Parent { ....
@Entity
@JsonIdentityInfo(generator=ObjectIdGenerators.PropertyGenerator.class, property="id")
public class Child { ....
メイヴンで
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.0.2</version>
</dependency>
@StaxManは、開始するための素敵なリンクを提供しました