/ / Spring Rest servcie produce JSON ma non per oggetti mappati con un db - java, json, spring, rest, spring-mvc

Spring Rest servcie produce JSON ma non per oggetti mappati con un db - java, json, spring, rest, spring-mvc

Mi ci sono volute ore per capire, qual è il problema:

Ho un servizio Spring Rest e un metodo GET che restituisce un utente in formato JSON. I dati provengono dal mio database su sessionFactory.

Dopo il debug si è scoperto che il problema è legato alla mia relazione bidirezionale onetomany-manytoone.

Quindi chiamare

        User user = (User) sessionFactory.getCurrentSession().load(User.class, userId);

restituisce un oggetto utente in cui user.getCity (). getSupplier () viene eseguito in una com.sun.jdi.InvocationException. Pertanto Jackson non è ovviamente in grado di serializzare. Ma cosa causa questa eccezione?

@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;

Utente:

@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;

Fornitore:

@Entity
@Table(name = "T_SUPPLIER")
public class Supplier implements Serializable {

private static final long serialVersionUID = 1L;

@Id
private long id;

@ManyToOne
private City city;

risposte:

0 per risposta № 1

Come menzionato nell'altra risposta, penso che "llscopri che i tuoi problemi sono legati alle relazioni da x a x. Questo a volte può creare problemi di riferimento circolari quando si tenta di jsonificare i bean di entità.

A volte puoi evitarlo o superarlo usando le annotazioni, altre volte è necessaria una classe wrapper. Spesso scrivo solo una classe wrapper per gestire le mie transazioni JSON

Esistono molti riferimenti a questo tipo di problemi che coprono molte lingue. Ecco alcuni punti di partenza per la tua ricerca.