Jsonmanagedref vs Jsonbackref
@JsonManagedReference
et @JsonBackReference
à Jackson?
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;
}
@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).
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
- @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.