SpringBootRESTAPI:在JSON中公开(或不公开)关联实体
我正在构建一个基于Spring引导的应用程序,以公开JSON REST API。 在这个应用程序中,我有一个1对多的关系:一个订单有多个项目(一个项目恰好属于一个订单)。 我希望有以下4个API端点:SpringBootRESTAPI:在JSON中公开(或不公开)关联实体,spring,spring-boot,spring-data,Spring,Spring Boot,Spring Data,我正在构建一个基于Spring引导的应用程序,以公开JSON REST API。 在这个应用程序中,我有一个1对多的关系:一个订单有多个项目(一个项目恰好属于一个订单)。 我希望有以下4个API端点: 获取所有订单:在这种情况下,我只需要订单本身-因此排除相关项目 获取单个订单:获取订单本身,包括相关项目 获取单个项目:获取单个项目,包括其所属的订单(此处仅包括订单的ID(=主键)或整个订单本身并不重要) 获取所有项目:获取所有项目;关联的顺序不是必需的,但也不会有任何影响 不幸的是,我对如
- 获取所有订单:在这种情况下,我只需要订单本身-因此排除相关项目
- 获取单个订单:获取订单本身,包括相关项目
- 获取单个项目:获取单个项目,包括其所属的订单(此处仅包括订单的ID(=主键)或整个订单本身并不重要)
- 获取所有项目:获取所有项目;关联的顺序不是必需的,但也不会有任何影响
非常感谢!我不确定是否有更好的方法,但我的方法是使用Hibernate建模和获取关系,但是以一种懒惰的方式()
在控制器中,您不返回实体,而是返回一个可能与您的实体非常相似的DTO类。该DTO由某个映射器组件创建,该组件提供包含或不包含关联项等逻辑。您的第一选择应该始终是求助于软件设计模式。在开发应用程序时可能需要远程连接(或不需要),有一个应该在rest api中实现: 考虑到您是在Java/Spring框架下开发的,您应该看看这个库并将其添加到Java/Spring框架中
我已经在RESTAPI中成功地完成了相同的任务。GET/orders;GET/orders/{id}记住在服务中加入fetch(或fetchType.Eager);GET/items;GET/orders/{id}/items,如果您想为特定的订单提供项目;GET/items/{id}single item;