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
Parent
il devrait avoirchildren
mais 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 avoirparent
avec leurchildren
(maischildren
ne pas avoirparent
peuplé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