Il m'a fallu des heures pour réaliser, quel est le problème:
J'ai un service Spring Rest et une méthode GET qui renvoie un utilisateur au format JSON. Les données proviennent de ma base de données via sessionFactory.
Après le débogage, il s'est avéré que le problème est lié à ma relation bidrectionnelle un à plusieurs.
Donc appeler
User user = (User) sessionFactory.getCurrentSession().load(User.class, userId);
renvoie un objet utilisateur dans lequel user.getCity (). getSupplier () s'exécute dans une exception com.sun.jdi.InvocationException. Par conséquent, Jackson est évidemment incapable de sérialiser. Mais qu'est-ce qui cause cette exception?
@Entity
@Table(name = "T_CITY")
public class City implements Serializable {
private static final long serialVersionUID = 1L;
@Id
private long id;
@OneToMany(mappedBy = "city", cascade=CascadeType.ALL)
private Set<User> user;
@OneToMany(mappedBy = "city", cascade=CascadeType.ALL)
private Set<Supplier> supplier;
Utilisateur:
@Entity
@Table(name = "T_USER")
public class User implements Serializable {
private static final long serialVersionUID = 1L;
public User() {
}
@Id
private long id;
@ManyToOne
private City city;
Fournisseur:
@Entity
@Table(name = "T_SUPPLIER")
public class Supplier implements Serializable {
private static final long serialVersionUID = 1L;
@Id
private long id;
@ManyToOne
private City city;
Réponses:
0 pour la réponse № 1Comme mentionné dans l'autre réponse, je pense que vousconstater que vos problèmes sont liés aux relations x-to-x. Cela peut parfois créer des problèmes de référence circulaire lorsque vous essayez de jsonifier les beans entité.
Parfois, vous pouvez éviter ou dépasser cela en utilisant des annotations, d'autres fois une classe wrapper est nécessaire. J'écris souvent juste une classe wrapper pour gérer mes transactions JSON
Il existe de nombreuses références à ce type de problèmes couvrant plusieurs langues. Voici quelques points de départ pour votre recherche.
- Recherche associée à Google concernant les références circulaires dans les objets d'entité
- Json et Java - Référence circulaire
- Dépendances circulaires avec Jackson