Estoy desarrolando una aplicación web con spring boot. Cuando realizo una consulta mediante un jparepositoy
del tipo findAll pretendo obtener la lista de usuarios y su rol correspondiente. En la respuesta obtenida se convierten a json
correctamente todas las propiedades de mi entidad Usuarios a excepción de la propiedad que encapsula el objeto rol.
Estas son las entidades Usuarios y Roles:
@Entity
@Table(name="usuarios")
public class Usuarios {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
int id_usuario;
@Column(name ="name")
String name;
@Column(name ="surname")
String surname;
@Column(name ="login")
String login;
@Column(name ="password")
String password;
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name ="rol")
@JsonIgnore
//@JsonBackReference
private Roles rol;
public Usuarios() {
}
}
package es.pdv.daw.proyect.beans;
@Entity
@Table(name="roles")
public class Roles {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private int idRol;
@Column(name ="rol_name")
private String rolName;
@OneToMany(mappedBy ="rol", cascade = CascadeType.ALL, fetch = FetchType.EAGER)
//@JsonManagedReference
private List<Usuarios> usuarios= new ArrayList<>();
public Roles() {
}
}
package es.pdv.daw.proyect.controller;
@RestController
public class ConsultasRestController {
/**
* Propiedad que encapsula el objeto de acceso a DAO.
*/
@Autowired
private LoginService loginService;
@RequestMapping(value="dameUsuarios",method = RequestMethod.GET)
public List<Usuarios> loadArticulos(List<Usuarios> usuarios){
return loginService.findAllUsers();
}
}
Este es el json
obtenido. Como se puede apreciar no se ha incluido el rol.
[{"name":"Jose Antonio","surname":"Bernabe Duran","login":"bubu","password":"bubu","idUsuario":1},{"name":"Alexis","surname":"Bernabe Pineda","login":"alex","password":"2010","idUsuario":2}]
В конце концов encontrГ© ошибка. HabГ - в забытый осуществить интерфейс serializable в организации и изменив это я забрал этикетки @JsonIgnore
, @JsonManagedReference
и @JsonBackReference
и все функционирует правильно.
@Entity
@Table(name="usuarios")
public class Usuarios implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
int id_usuario;
@Column(name ="name")
String name;
@Column(name ="surname")
String surname;
@Column(name ="login")
String login;
@Column(name ="password")
String password;
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name ="rol")
private Roles rol;
public Usuarios() {
}
@Entity
@Table(name="roles")
public class Roles implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private int idRol;
@Column(name ="rol_name")
private String rolName;
@OneToMany(mappedBy ="rol", cascade = CascadeType.ALL, fetch = FetchType.EAGER)
private List<Usuarios> usuarios= new ArrayList<>();
public Roles() {
}
[
{
"name":"Jose Antonio",
"surname":"Bernabe Duran",
"login":"bubu",
"password":"bubu",
"rol":{
"idRol":1,
"rolName":"Administrador"
},
"idUsuario":1
},
{
"name":"Alexis",
"surname":"Bernabe Pineda",
"login":"alex",
"password":"2010",
"rol":{
"idRol":2,
"rolName":"Usuario"
},
"idUsuario":2
},
{
"name":"Maria Luisa",
"surname":"Pineda Uber",
"login":"ml",
"password":"1979",
"rol":{
"idRol":1,
"rolName":"Administrador"
},
"idUsuario":3
},
{
"name":"Rafael",
"surname":"Martin Lopez",
"login":"Rafa",
"password":"rafa",
"rol":{
"idRol":2,
"rolName":"Usuario"
},
"idUsuario":4
}
]
Он, потому что ты считаешь свойство СПИСОК записанным с @JsonIgnore
то, что способствует тому, чтобы не было последовательно преобразовано это поле.
Доказательство меняя ссылку Списка на Пользователя в:
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name ="rol")
//@JsonIgnore quitamos ignore
private Roles rol;
И Мы Добавляем ignore в:
@OneToMany(mappedBy ="rol", cascade = CascadeType.ALL, fetch = FetchType.EAGER)
@JsonIgnore
private List<Usuarios> usuarios= new ArrayList<>();