Java SpringDataREST:是否可以动态嵌入资源';在一个单一的回应中,你的关系是什么?
在SpringDataREST中,是否可以在HAL响应中嵌入主资源关系的数据 原因是,在某些情况下,客户知道她将立即需要Java SpringDataREST:是否可以动态嵌入资源';在一个单一的回应中,你的关系是什么?,java,spring-boot,spring-data,spring-data-rest,spring-hateoas,Java,Spring Boot,Spring Data,Spring Data Rest,Spring Hateoas,在SpringDataREST中,是否可以在HAL响应中嵌入主资源关系的数据 原因是,在某些情况下,客户知道她将立即需要儿童资源和学校和宠物关系 使用链接,可以在n个请求中请求此信息,但理想情况下可以在1个请求中请求 注意:n级深度会很好(JSON-API支持这一点),但现在即使是1级深度也足够了 根据HAL规范,这显然是可能的,甚至可以使用纯弹簧hateoas(参见) 这在spring data rest的任何方式下都是可能的吗? 如果没有大量的锅炉板代码和基本上重写SDR位,这是可能的吗
儿童
资源和学校
和宠物
关系
使用链接,可以在n个请求中请求此信息,但理想情况下可以在1个请求中请求
注意:n级深度会很好(JSON-API支持这一点),但现在即使是1级深度也足够了
根据HAL规范,这显然是可能的,甚至可以使用纯弹簧hateoas(参见)
- 这在spring data rest的任何方式下都是可能的吗?
- 如果没有大量的锅炉板代码和基本上重写SDR位,这是可能的吗
请注意,所有有问题的资源都应该是顶级资源,因此不要使用
@RestResource(exported=false)
并按照建议将它们内联。您可以定义一个将关联数据内联的投影:
见:
8.3。摘录通常访问的数据在编写域对象时,REST服务会出现一种常见情况。例如,一个人
存储在一个表中,其相关地址存储在另一个表中。
默认情况下,SpringDataREST将作为用户地址提供
客户端必须导航的URI。但如果消费者普遍认为
始终获取这段额外的数据,摘录投影可以
提前并内联这段额外的数据,为您节省额外的GET
@Projection(name=“withAssociations”,types={MyEntity.class})
与AssociationsProjection的公共接口{
//方法名称与相应实体中的getter方法匹配
列出学校();
列出getPets();
//您还可以将数据的子集串联起来,或具有更高的级别
//关联的数据的列表,按
//将另一个投影指定为集合类型。
列出getChildren();
}
然后,客户端可以请求数据的特定视图,如:
不幸的是,预测不能准确回答这个问题。投影内嵌数据,但不使用HAL中的
\u嵌入式
键。如果同一个实体由多个父实体内联,那么它将在有效负载中重复,浪费大量空间。我想定制控制器将是未来的方向。
@Projection(name = "withAssociations", types = { MyEntity.class })
public interface WithAssocationsProjection{
//method names match the getter methods in the corresponding Entity
List<School> getSchools();
List<Pet> getPets();
//you can also in-line a subset of data or have a further level
//of data in-lined for the association by
//specifying a further projection as the Collection Type.
List<ChildProjection> getChildren();
}