J'ai deux entités:
Parent {
Child[] children;
}
and
Child {
Parent parent;
}
Je connais @JsonBackReference
et @JsonManagedReference
. Ils sont bons, si je sérialise des instances de Parent
.
Mais je dois également transférer des instances de Child
et je veux que le champ parent
soit rempli.
En d'autres termes:
Parent
, il devrait avoir children
mais leur champ parent peut être vide (peut être résolu en utilisant des annotations de référence json).Child
, il devrait avoir parent
avec leur children
(mais children
n'a pas besoin d'avoir parent
rempli.Existe-t-il un moyen de le résoudre en utilisant les capacités Jackson standard?
C'est à dire. ignorer la sérialisation des entités qui étaient déjà sérialisées au lieu de marquer les champs éligibles ou non éligibles pour la sérialisation.
Jackson 2.0 prend en charge les références d'objet cycliques complètes. Voir " Jackson 2.0 est sorti " (section 'Gérer tous les graphiques d'objets, même cycliques!') Pour un exemple.
Fondamentalement, vous devrez utiliser le nouveau @JsonIdentityInfo
pour les types qui nécessitent une gestion de style id/idref. Dans votre cas, ce serait à la fois les types Parent
et Child
(si l'un étend l'autre, ajoutez-le simplement au super type et c'est très bien).
l'implémentation de l'interface très pratique est fournie 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 joli lien pour commencer