java - 在春季使用多对一映射时获得无限的Json响应
问题描述
我正在尝试在春季创建两个实体之间的多对一映射。但是,当我尝试使用 restController 获取值时,我得到
Java.lang.IllegalStateException:提交响应后无法调用 sendError()
错误和无限的 JSON 响应。添加 JSON 忽略解决了这个问题,但我的回复中根本没有得到该列。我不知道如何解决这个问题。请帮忙。提前致谢。
这是我的实体:
@Entity
@Table(name="tbl1")
public class Data {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
@Column(name = "customer")
private String customer;
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name="data_id", insertable = true, nullable = false, updatable = false)
private DataList dataList1;
}
@Entity
@Table(name="tbl2")
public class DataList {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name="data_id")
private Long dataId;
@Column(name="user_name")
private String userName;
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER,mappedBy = "dataList1")
private List<Data> data1;
}
存储库:
@Repository
@Transactional
public interface DataList extends JpaRepository<DataList,Long> {
}
@Repository
@Transactional
public interface Data extends JpaRepository<Data,Long> {
}
我的错误:Java.lang.IllegalStateException: Cannot call sendError() after the response has been committed
解决方案
它正在发生,因为 JSON 序列化程序试图一次又一次地递归地序列化这两个实体。
所以,在序列化时Data
,它的成员dataList1
是DataList
进一步包含的类型List<Data>
,这个循环将是无限的。
理想情况下,在这种情况下,实体应该映射到其他一些用于序列化和响应的模型,或者需要其中一个模型@JsonIgnore
来避免这种递归循环。
推荐阅读
- azure - 如何使 azure devops 发布管道单击一次
- python - Opencv(opencv-contrib)在使用对象检测模块(cv2.dnn.readNet)后改变图像的颜色
- ios - 操作无法完成。(OSStatus 错误 561015905。)
- spring-boot - 将 spring-cloud-config 与 spring-cloud-bus 一起使用
- vue.js - 首次加载 vue js 2.0 时登录页面重定向到 404
- reactjs - 如何将 React ErrorBoundary 与 redux-observable 一起使用?
- python - python 5 d矩阵写入nc文件
- c# - 用户检索器在 Serenity 框架中返回 null
- c++ - 使用win32项目无法在少数windows机器上建立IPC连接
- pandas - 合并两个数据框而不复制列