/ / Spring Rest servcie produit JSON mais pas pour les objets mappés avec une base de données - java, json, spring, rest, spring-mvc

Spring Rest servcie produit JSON mais pas pour les objets mappés avec une base de données - java, json, spring, rest, spring-mvc

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 № 1

Comme 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.