如何修复spring boot一对多双向无限循环?
我正在尝试使用SpringBoot和SpringDataJPA创建一对多的双向映射。请查看下面的实体 雇主实体 雇主回购 现在问题开始了,请看我的答案 它看起来像一个内讧循环,我的服务器抛出错误getOutputStream()已被调用用于此响应如何修复spring boot一对多双向无限循环?,spring,spring-boot,spring-data,hibernate-mapping,bidirectional,Spring,Spring Boot,Spring Data,Hibernate Mapping,Bidirectional,我正在尝试使用SpringBoot和SpringDataJPA创建一对多的双向映射。请查看下面的实体 雇主实体 雇主回购 现在问题开始了,请看我的答案 它看起来像一个内讧循环,我的服务器抛出错误getOutputStream()已被调用用于此响应 I used @JsonBackReference & @JsonManagedReference 但问题是它的工作方式就像一对多 { "id":1, "employerName":"employer", "empl
I used @JsonBackReference & @JsonManagedReference
但问题是它的工作方式就像一对多
{
"id":1,
"employerName":"employer",
"employees":[
{"id":1,"employeeName":"emp1"},
{"id":2,"employeeName":"emp2"}
]
}
如果我想和雇主达成多对一的共识。输出是
[
{
"id":1,
"employeeName":"emp1"
},
{
"id":2,
"employeeName":"emp2"}
]
它没有向我显示雇主的详细信息
请告诉我我做错了什么。提前谢谢 不要使用
@JsonBackReference
和@JsonManagedReference
尝试使用注释@jsonignoreporties
:
@JsonIgnoreProperties("employer")
private List<Employee> employees;
@JsonIgnoreProperties("employees")
private Employer employer;
@JsonIgnoreProperties(“雇主”)
私人名单雇员;
@JsonIgnoreProperties(“员工”)
私人雇主;
它会阻止Jackson呈现关联对象的指定属性。您可以通过两个注释修改来解决问题
雇主等级
@Entity
public class Employer {
private Long id;
private String employerName;
@OneToMany(cascade = CascadeType.ALL,
mappedBy = "employer",
orphanRemoval = true)
private List<Employee> employees;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getEmployerName() {
return employerName;
}
public void setEmployerName(String employerName) {
this.employerName = employerName;
}
public List<Employee> getEmployees() {
return employees;
}
public void setEmployees(List<Employee> employees) {
this.employees = employees;
}
}
有关更多信息,请访问此网站。使用JSON时,双向映射存在问题。使用以下属性
@JsonIgnoreProperties("employer")
@JsonIgnoreProperties("employees")
请继续抓取类型
希望这能奏效 像这样更改getEmployer方法:
@ManyToOne(cascade=CascadeType.ALL,fetch=FetchType.LAZY)
@JsonProperty(access=JsonProperty.access.WRITE_ONLY)
公共雇主
{
返回雇主;
}
谢谢您的回答!!但在按照您的建议添加注释后,我在获取员工详细信息时遇到以下异常:org.springframework.http.converter.HttpMessageNotWritableException:无法写入JSON:找不到类的序列化程序谢谢,我发现了与延迟获取相关的问题!!请您解释一下(@JsonBackReferenceand,@JsonManagedReference)的问题是什么,以及(@jsonignoreperties)的修复方法。请给出更多解释谢谢伙计,你节省了我的时间上面的建议很有效,因为你**不希望**员工详细信息出现在**雇主**json回复中。要显示员工详细信息,请不要在雇主实体中使用第1行上方的@JsonIgnoreProperties(“雇主”)。最后,我一直在寻找的答案是:)谢谢!
{
"id":1,
"employerName":"employer",
"employees":[
{"id":1,"employeeName":"emp1"},
{"id":2,"employeeName":"emp2"}
]
}
[
{
"id":1,
"employeeName":"emp1"
},
{
"id":2,
"employeeName":"emp2"}
]
@JsonIgnoreProperties("employer")
private List<Employee> employees;
@JsonIgnoreProperties("employees")
private Employer employer;
@Entity
public class Employer {
private Long id;
private String employerName;
@OneToMany(cascade = CascadeType.ALL,
mappedBy = "employer",
orphanRemoval = true)
private List<Employee> employees;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getEmployerName() {
return employerName;
}
public void setEmployerName(String employerName) {
this.employerName = employerName;
}
public List<Employee> getEmployees() {
return employees;
}
public void setEmployees(List<Employee> employees) {
this.employees = employees;
}
}
@Entity
public class Employee {
private Long id;
private String employeeName;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "employer_id")
private Employer employer;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getEmployeeName() {
return employeeName;
}
public void setEmployeeName(String employeeName) {
this.employeeName = employeeName;
}
public Employer getEmployer() {
return employer;
}
public void setEmployer(Employer employer) {
this.employer = employer;
}
}
@JsonIgnoreProperties("employer")
@JsonIgnoreProperties("employees")