Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java SpringDataREST:是否可以动态嵌入资源';在一个单一的回应中,你的关系是什么?_Java_Spring Boot_Spring Data_Spring Data Rest_Spring Hateoas - Fatal编程技术网

Java SpringDataREST:是否可以动态嵌入资源';在一个单一的回应中,你的关系是什么?

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位,这是可能的吗

在SpringDataREST中,是否可以在HAL响应中嵌入主资源关系的数据

原因是,在某些情况下,客户知道她将立即需要
儿童
资源和
学校
宠物
关系

使用链接,可以在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();
}