[英]com.fasterxml.jackson.databind.ser.std.CollectionSerializer.serialize(CollectionSerializer.java:25 SpringBoot
[英]com.fasterxml.jackson.databind.ser.BeanSerializer.serialize Spring JPA
春季我的课之间有一对多的关系。 当我尝试登录时出现错误,就像无限递归一样,这是整个错误消息。
at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:155) ~[jackson-databind-2.8.10.jar:2.8.10]
at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:704) ~[jackson-databind-2.8.10.jar:2.8.10]
at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:689) ~[jackson-databind-2.8.10.jar:2.8.10]
at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:155) ~[jackson-databind-2.8.10.jar:2.8.10]
at com.fasterxml.jackson.databind.ser.std.CollectionSerializer.serializeContents(CollectionSerializer.java:149) ~[jackson-databind-2.8.10.jar:2.8.10]
at com.fasterxml.jackson.databind.ser.std.CollectionSerializer.serialize(CollectionSerializer.java:112) ~[jackson-databind-2.8.10.jar:2.8.10]
at com.fasterxml.jackson.databind.ser.std.CollectionSerializer.serialize(CollectionSerializer.java:25) ~[jackson-databind-2.8.10.jar:2.8.10]
at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:704) ~[jackson-databind-2.8.10.jar:2.8.10]
at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:689) ~[jackson-databind-2.8.10.jar:2.8.10]
我有5个相互关联的类。 他们来了:
@Entity
public class AppUser implements UserDetails {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String name;
@Column(unique = true)
private String username;
private String password;
@ElementCollection(fetch = FetchType.EAGER)
private List<String> roles = new ArrayList<>();
@ManyToOne
@JoinColumn(name = "apartmen_id")
@JsonIgnoreProperties(value = {"apartmen_tenats"}, allowSetters=true)
private Apartmen apartmen; // apartmen in which he lives
@ManyToOne
@JoinColumn(name = "institution_id")
@JsonIgnoreProperties(value = {"workers"}, allowSetters=true)
private Institution institution; // institution in which he works
@OneToMany(mappedBy = "worker")
@JsonIgnoreProperties(value = {"worker"}, allowSetters = true)
private Set<Failure> failures; // Kvarovi na kojima je radio
}
第二类:
@Entity
public class Failure implements Serializable {
/**
*
*/
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String name;
private String description; // Opis kvara
@Temporal(TemporalType.TIMESTAMP)
private Date dateCreated; // Datum i vreme kada je kvar kreiran
@Temporal(TemporalType.TIMESTAMP)
private Date dateSolved; // Datum i vreme kada je kvar popravljen
private boolean solved; // Da li je kvar popravljen
@ManyToOne
@JoinColumn(name = "app_user_id")
@JsonIgnoreProperties(value = {"failures"}, allowSetters=true)
private AppUser worker; // Radnik koji je zaduzen za kvar
@ManyToOne
@JoinColumn(name = "institution_id")
@JsonIgnoreProperties(value = {"failures"}, allowSetters=true)
private Institution institution; // Institucija kojoj je kvar prijavljen
@ManyToOne
@JoinColumn(name = "building_id")
@JsonIgnoreProperties(value = {"failures"}, allowSetters=true)
private Building building; // Zgrada u kojoj je kvar nastao
}
第三类:
@Entity
public class Building implements Serializable{
/**
*
*/
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String name;
private String location;
private String owner; // Vlasnik zgrade
private int numberOfApartments;
private int numberOfAparartmentsWithTenats; // Broj stanova koji su naseljeni
private boolean hasPresident; // Oznacava da li zgrada ima predsednika skupstine stanara
@OneToMany(mappedBy = "apartmenBuilding")
@JsonIgnoreProperties(value = {"apartmenBuilding"}, allowSetters = true)
private Set<Apartmen> apartments; // stanovi u zgradi
@ManyToMany(mappedBy = "buildings")
@JsonIgnoreProperties(value = {"buildings"}, allowSetters = true)
private Set<Institution> institutions;
@OneToMany(mappedBy = "building", fetch = FetchType.EAGER)
@JsonIgnoreProperties(value = {"building"}, allowSetters = true)
private List<Failure> failures; // Kvarovi koji su nastali u zgradi
}
第四类:
@Entity
public class Institution {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String name;
private String location;
private String director;
private String email;
private String contactPhone;
private String webSiteUrl;
@ManyToMany(fetch = FetchType.EAGER, cascade = CascadeType.MERGE)
@JoinTable(name = "institution_building",
joinColumns = @JoinColumn(name = "institution_id", referencedColumnName = "id"),
inverseJoinColumns = @JoinColumn(name = "building_id", referencedColumnName = "id"))
@JsonIgnoreProperties(value = {"institutions"}, allowSetters=true)
private Set<Building> buildings; // Buildings which this institution is maintaining
@OneToMany(mappedBy = "institution")
@JsonIgnoreProperties(value = {"institution"}, allowSetters = true)
private Set<AppUser> workers;
@OneToMany(mappedBy = "institution", fetch = FetchType.EAGER, cascade = CascadeType.ALL)
@JsonIgnoreProperties(value = {"institution"}, allowSetters = true)
private Set<Failure> failures; // Kvarovi na kojima je radila institucija
}
最后一类是:
@Entity
public class Apartmen implements Serializable {
/**
*
*/
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String name;
private String location;
private String owner;
private int numberOfTenats;
private boolean hasApartmentBuilding;
private boolean hasOwner;
@ManyToOne
@JoinColumn(name = "building_id")
@JsonIgnoreProperties(value = {"apartments"}, allowSetters=true)
private Building apartmenBuilding;
@OneToMany(mappedBy = "apartmen")
@JsonIgnoreProperties(value = {"apartmen"}, allowSetters = true)
private Set<AppUser> apartmen_tenats;
}
我不知道为什么会这样,但是也许是由于与失败类的关系。 我认为可能是这种情况,因为该类与我的代码中的所有其他类都有关系。 如果真是这样,那么您能不能告诉我为什么会这样以及如何正确进行。
先感谢您。
@JsonIgnoreProperties
是一个类级别的注释,它希望忽略类中的确切字段名称。
最好的方法是简单地替换所有@JsonIgnoreProperties
@JsonIgnore.
即
@ManyToOne
@JoinColumn(name = "apartmen_id")
@JsonIgnoreProperties(value = {"apartmen_tenats"}, allowSetters=true)
private Apartmen apartmen;
更改为
@ManyToOne
@JoinColumn(name = "apartmen_id")
@JsonIgnore
private Apartmen apartmen;
对所有此类@JsonIgnoreProperties
进行类似的更改。 这应该工作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.