Jackson-sérialisation des entités avec des relations birectionnelles (éviter les cycles)
j'ai deux entités:
Parent {
Child[] children;
}
and
Child {
Parent parent;
}
je suis au courant pour @JsonBackReference et @JsonManagedReference .
Ils sont bons, si je sérialise des instances de Parent .
mais je dois aussi transférer les instances de Child et je veux que le champ parent soit peuplé.
en d'autres termes:
- sur la sérialisation de
Parentil devrait avoirchildrenmais leur parent le champ peut être vide (peut être résolu en utilisant json annotations de référence). - Sur la sérialisation de
Child, il faut avoirparentavec leurchildren(maischildrenne pas avoirparentpeuplée.
Existe-t-il un moyen de le résoudre en utilisant les capacités Jackson standard?
i. e. sauter la sérialisation des entités qui ont déjà été sérialisées au lieu de marquer les champs éligibles ou non admissible à la sérialisation.
2 réponses
Jackson 2.0 Supporte les références complètes d'objets cycliques. Voir " Jackson 2.0 publié "(section " Gérer n'Importe quel Objet de Graphiques, de même Cyclique!') pour un exemple.
fondamentalement, vous aurez besoin d'utiliser le nouveau @JsonIdentityInfo pour les types qui exigent la manipulation de style id/idref. Dans votre cas, ce serait à la fois Parent et Child types (si l'un étend l'autre, il suffit de l'ajouter au super type et c'est très bien).
mise en œuvre d'interface très pratique est fourni dans la bibliothèque jackson 2 comme
@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 a fourni un lien agréable pour commencer à partir de