Versiones comparadas

Clave

  • Se ha añadido esta línea.
  • Se ha eliminado esta línea.
  • El formato se ha cambiado.

Para evitar dependencias circulares al obtener objetos de base de datos y serializarlos, disponemos de las anotaciones @JsonBackReference y @JsonManagedReference, que utilizaremos sobre los atributos que forman la relación bidireccional. 

  • @JsonManagedReference se utiliza en la clase "padre" de la relación bidireccional, es decir, la que se mostrará de forma normal.
  • @JsonBackReference es en el que sería el "hijo",  la parte que se omitirá al ser serializado.

Podemos poner el siguiente ejemplo, con una clase User que tiene una lista de Item, y la clase Item que tiene un atributo User. Si queremos que al obtener el Item se incluya su User, pero que al mostrar este User se omita la lista de Items (lo que generaría un bucle infinito), pondríamos las anotaciones así:

Bloque de código
languagejava
public class User {
    public int id;
    public String name;
    public List<Item> userItems;
 
    @JsonBackReference
    public List<Item> getUserItems() {
        return userItems;
    }
}
 
public class Item {
    public int id;
    public String itemName;
    public User owner;
 
    @JsonManagedReference
    public User getOwner() {
        return owner;
    }
 }

Así, un ejemplo de respuesta al obtener un Item sería este:


Bloque de código
languagejson
{
 "id":2,
 "itemName":"book",
 "owner":
    {
        "id":1,
        "name":"John"
    }
}