java–REST控制器中具有一对多关系的实体的递归JSON视图

java–REST控制器中具有一对多关系的实体的递归JSON视图,第1张

概述我正在使用SpringBoot和JPA来构建REST接口.现在,我为从数据库中提取的产品列表返回了一个奇怪的JSON.让我们说我有:@Entity public class Product { @Id @GeneratedValue(strategy = GenerationType.AUTO) private Long id;

我正在使用SpringBoot和JPA来构建REST接口.

现在,我为从数据库中提取的产品列表返回了一个奇怪的JSON.让我们说我有:

@Entitypublic class Product {    @ID    @GeneratedValue(strategy = GenerationType.auto)    private Long ID;    @ManyToOne(optional = false,fetch = FetchType.LAZY)    @JoinColumn(name = "categoryID",nullable = false,updatable = false)    private category category;    ...}@Entitypublic class category implements Serializable {    @ID    @GeneratedValue(strategy = GenerationType.auto)    private Long ID;    @OnetoMany(mappedBy = "category",cascade = CascadeType.DETACH)    @OrderBy("name ASC")    private List

产品的JPA存储库定义为:

public interface ProductRepository extends JpaRepository

在我的控制器中我有:

@autowiredprivate ProductRepository productRepo;@RequestMapPing("/all-products",method = RequestMethod.GET)public Map

让我疯狂的是,如果我尝试按如下方式调用此服务:

$curl localhost:8080/all-products

由于表产品和类别之间的关系,我得到一个递归输出,例如:

{"products":[{"ID":1,"name":"Product1","category":{"ID":1,"name":"Cat1","products":[{"ID":6,"name":"Product6",...

我究竟做错了什么?最佳答案你没有做错任何事情(至少在代码级别它是相当概念性的) – Json序列化器就像这样:

>产品 – 序列化它,但等待 – 有一个类别字段,因此序列化程序必须序列化类别字段
>类别 – 序列化它,但等待 – 有一个产品字段,因此序列化程序必须序列化列表中的每个产品
>产品 – 因为您的产品系列包含产品和产品.产品包含类别,它进入无限循环,直到超时.

您必须使用视图或只是跳过它.

>使用@JsonView
>将视图用作POJO
将具有产品的所有字段和引用(类别)的新ProductVIEw返回到新的categoryVIEw(此时可以结束),其中包含(产品)新ProductVIEwWithoutReferences的集合,依此类推
>在一系列产品上使用@JsonIgnore

并且作为旁注 – 如果它是@RestController并且您正在调用“所有产品”,那么返回除列表之外的其他东西有点不寻常.在地图中包装响应是多余的.许多其他客户端在调用List()方法时需要一个列表. 总结

以上是内存溢出为你收集整理的java – REST控制器中具有一对多关系的实体的递归JSON视图全部内容,希望文章能够帮你解决java – REST控制器中具有一对多关系的实体的递归JSON视图所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1263185.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-08
下一篇 2022-06-08

发表评论

登录后才能评论

评论列表(0条)