spring-data-rest:是否可以在单个响应中动态嵌入资源的关系?

时间:2016-12-15 16:21:35

标签: java spring-boot spring-data spring-data-rest spring-hateoas

是否可以在spring数据休息中嵌入HAL响应中主要资源关系的数据?

原因是,在某些情况下,客户知道她一次需要Child资源以及SchoolPets关系。

使用链接可以在n个请求中请求此信息,但理想情况下可以在1中执行。

注意:n级深度会很好(JSON-API支持这个)但是现在甚至1级深度就足够了。

根据HAL规范,这显然是可能的,甚至可以使用普通的春天 - hateoas(见this example)。

  • 弹簧数据休息是否可以以任何方式实现?
  • 是否可以在没有大量锅炉板代码且基本上重写SDR的位?

如果是这样,怎么办?例子非常受欢迎。

请注意,所有相关资源都应该是顶级资源,因此不要使用@RestResource(exported = false)并将其作为提倡的by Oliver here内联。

1 个答案:

答案 0 :(得分:2)

您可以定义一个内联关联数据的投影:

请参阅:

http://docs.spring.io/spring-data/rest/docs/current/reference/html/#projections-excerpts

  

<强> 8.3。摘录常用数据组合域对象时会出现REST服务的常见情况。例如,一个人   存储在一个表中,它们的相关地址存储在另一个表中。   默认情况下,Spring Data REST将提供此人的地址作为   客户端必须导航的URI。但如果这对消费者来说很常见   总是获取这个额外的数据,摘录投影可以去   提前并内联这一额外的数据,为您节省额外的GET

@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();
}

然后,客户可以请求特定的数据视图,如:

http://localhost:9090/api/myEntities?projection=withAssociations

http://localhost:9090/api/myEntities/123?projection=withAssociations