有选择地扩展Spring Data Rest响应中的关联

Lui*_*tos 13 java rest spring spring-data spring-data-rest

我有一个标准的Spring数据JPA和Spring数据Rest设置,它正确地返回关联作为正确资源的链接.

{
    "id": 1,
    "version": 2,
    "date": "2011-11-22",
    "description": "XPTO",
    "_links": {
        "self": {
            "href": "http://localhost:8000/api/domain/1"
        },
        "otherDomain": {
            "href": "http://localhost:8000/api/domain/1/otherDomain"
        }
    }
}   
Run Code Online (Sandbox Code Playgroud)

但是在某些请求中,我希望扩展与"otherDomain"的关联(因此客户端不必执行N + 1个请求来获取完整数据).

是否可以配置Spring Data Rest以这种方式处理响应?

Oli*_*ohm 23

默认响应必须保持不变,以确保PUT请求的有效负载GET与返回的有效负载对称.但是,Spring Data REST引入了一个名为projection的功能(有关详细信息,请参阅JIRA票证),其工作方式如下:

您可以创建专用接口并添加要包含在响应中的所有属性:

public interface MyProjection {

  String getMyProperty();

  MyRelatedObject getOtherDomain();
}
Run Code Online (Sandbox Code Playgroud)

你也可以

  • 使用接口来注释接口@Projection,并将其放在与域类型或其子包相同的包中
  • 或者您手动注册投影RepositoryRestConfigurationprojectionConfiguration().addProjection(…)手动调用(通过扩展RepositoryRestMvcConfiguration和覆盖configureRepositoryRestConfiguration(…)).

这将导致为域类型公开的资源接受具有投影名称的projection参数(名称也可配置ProjectionConfiguration).如果给出,我们将跳过默认呈现(包括呈现指向相关实体的链接而不是嵌入它们),并让Jackson呈现支持给定接口的代理.

一个例子也可以在Spring RESTBucks项目中找到.请参阅OrderProjection接口定义.

  • 是否有可能通过预测进一步向下扩展?例如,如果`otherDomain`后面的对象本身与`oneMoreDomain`有关联,那么它是否也可以添加到原始响应中? (4认同)