Jsonmanagedref vs Jsonbackref

<!-Je voudrais connaître la différence entre @JsonManagedReference et @JsonBackReference à Jackson?

20
demandé sur Abdullah Khan 2015-07-09 16:43:21

4 réponses

@JsonManagedReference est la partie avant de la référence – celle qui est sérialisée normalement. @Jsonbackref est la partie arrière de référence-elle sera omise de la sérialisation.

Donc ils dépendent vraiment de la direction de votre relation

public class User {
    public int id;
    public String name;

    @JsonBackReference
    public List<Item> userItems; 
} 

public class Item {
    public int id;
    public String itemName;

    @JsonManagedReference
    public User owner; 
 }
31
répondu david99world 2017-09-13 07:13:03

@JsonManagedReference et @JsonBackReference sont conçus pour gérer ce lien bidirectionnel entre les champs, l'un pour le rôle de Parent, l'autre pour le rôle d'enfant.

pour éviter le problème, le lien est manipulé de sorte que la propriété annoté avec @Jsonmanagedref l'annotation est traitée normalement (sérialisé normalement, pas de traitement particulier pour la désérialisation) et la la propriété annotée avec @JsonBackReference annotation n'est pas sérialisé; et lors de la désérialisation, sa valeur est définie pour exemple qui a "réussi" (en avant).

3
répondu ozgur 2016-11-18 09:31:26

je préfère

@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property = "id", scope = Long.class)

où la propriété est le nom du champ clé primaire et la portée est de Type

3
répondu Rajat Verma 2017-11-17 13:37:46
  • @JsonManagedReference - > gère la partie avant de la référence et les champs marqués par cette annotation sont ceux qui sont sérialisés
  • @JsonBackReference - > gère la partie inversée de la référence et les champs/collections Marqués de cette annotation ne sont pas sérialisés.

de cas d'Utilisation: Vous avez un-beaucoup ou beaucoup-beaucoup de relations dans vos entities / tables et ne pas utiliser ce qui précède conduirait à des erreurs comme

Infinite Recursion and hence stackoverflow - > Could not write content: Infinite recursion (StackOverflowError)

les erreurs ci-dessus se produisent parce que Jackson (ou un autre similaire) essaie de sérialiser les deux extrémités de la relation et finit dans une récursion.

@JsonIgnore exécute des fonctions similaires mais les annotations mentionnées ci-dessus sont préférables.

2
répondu HopeKing 2017-04-18 13:41:47