Cyclique des références dans un bidirectionnel de nombreux de nombreux de la relation
Je vais avoir une bidirectionnel de nombreuses de nombreuses relations dans mes entités. Voir l'exemple ci-dessous:
public class Collaboration {
@JsonManagedReference("COLLABORATION_TAG")
private Set<Tag> tags;
}
public class Tag {
@JsonBackReference("COLLABORATION_TAG")
private Set<Collaboration> collaborations;
}
Quand j'essaie de sérialiser ce JSON, je suis l'exception suivante: `
"de java.lang.IllegalArgumentException: ne Peut pas gérer géré/retour
référence "COLLABORATION_TAG': arrière type de référence (java.util.Set) ne pas
compatible avec la gestion du type (foo.La Collaboration).
En fait, je sais que cela fait du sens parce que la javadoc stipule explicitement que vous ne pouvez pas utiliser @JsonBackReference sur les Collections. Ma question est, comment dois-je régler ce problème? Ce que j'ai fait pour l'instant est de supprimer l' @JsonManagedReference annotation sur le parent côté, et a ajouté l' @JsonIgnore sur le côté. Quelqu'un pourrait-il me dire quels sont les effets secondaires sont de cette approche? Existe-il d'autres suggestions?
Le
JsonIdentityInfo
annotation est belle, merci @EugeneRetunsky ! J'ai trouvé cette page très utile d'apprendre comment cela fonctionne: wiki.fasterxml.com/JacksonFeatureObjectIdentityJ'ai essayé
JsonManagedReference
et JsonBackReference
aucune de ces travaux. Mais, @SimonAndréForsberg s 'donné en lien est très intéressant et fonctionne.OriginalL'auteur tstorms | 2012-11-29
Vous devez vous connecter pour publier un commentaire.
J'ai fini la mise en œuvre de la solution suivante.
Une fin de la relation est considérée comme le parent. Il n'a pas besoin de Jackson liées à l'annotation.
L'autre côté de la relation est mise en œuvre comme suit.
Je suis en utilisant une mesure sérialiseur pour s'assurera qu'aucune cyclique références de se produire. Le processus pourrait être mis en œuvre comme ceci:
Ce sérialiseur de ne montrer qu'un ensemble limité de propriétés de la Collaboration de l'entité. Parce que les "tags" de la propriété est omis, pas cyclique des références de se produire.
Une bonne lecture sur ce sujet peuvent être trouvées ici. Il explique toutes les possibilités lorsque vous êtes confronté à un scénario similaire.
OriginalL'auteur tstorms
très pratique implémentation de l'interface qui est fournie à jackson 2 la bibliothèque comme
dans maven
<artifactId>jackson-annotations</artifactId>
. C'est ce qui a fonctionné pour mon build, de toute façon.OriginalL'auteur Oleksii Kyslytsyn