如何将投影应用于 Spring 数据 REST 查询方法资源?

How do I apply a projection to a Spring Data REST query method resource?

我正在使用 Spring 数据 REST 2.1。4.RELEASE。

我创造了

客户端获得所有使用 .../rest/bookings 的预订,并且 JSON 响应包括链接实体的链接。如果它添加 ?projection=details,则链接的实体将被分解并 returned。这太棒了。

现在我将此自定义方法 添加到存储库:

List<Booking> findByApplicant(@Param("applicant") Person applicant);

当客户端用.../rest/bookings/search/findByApplicant?applicant=5调用它时,似乎没有办法请求details投影。以下尝试将被忽略:

总结,自定义搜索方法 (findBy*) 从未 return 投影 。除非你用 @RepositoryRestResource(excerptProjection = BookingDetails.class) 注释存储库,但这会导致一些问题,首先客户端必须始终使用相同的投影。我们如何允许用户也使用 findBy* 方法进行投影?

我用 Spring Data REST 2.2.1 验证了这个,所以请更新它。确保您的客户端确实按照您的意图发送了请求的参数。在调试时,我发现例如如果您没有显式引用 URI,cURL 会丢弃查询参数。所以这个:

curl http://localhost:8080/orders/search/findByApplicant?applicant=5&projection=details

不会发送任何查询参数。一旦你引用 URI,它就会。

curl 'http://localhost:8080/orders/search/findByApplicant?applicant=5&projection=details'

日益流行的 HTTPie 也是如此。有了它,所需的语法是:

http :8080/orders/search/findByApplicant applicant==5 projection==details

如果您不能让它以这种方式工作,那么获得一个 运行 示例项目来查看会很酷。