如何将投影应用于 Spring 数据 REST 查询方法资源?
How do I apply a projection to a Spring Data REST query method resource?
我正在使用 Spring 数据 REST 2.1。4.RELEASE。
我创造了
- 实体
Booking
、
- 其 REST 存储库(扩展
CrudRepository
)名为 BookingRepository
- 和一个投影
BookingDetails
(用@Projection(name="details", types = Booking.class)
注释)return它的一些链接实体爆炸了,例如Resource
、Activity
、Applicant
等
客户端获得所有使用 .../rest/bookings
的预订,并且 JSON 响应包括链接实体的链接。如果它添加 ?projection=details
,则链接的实体将被分解并 returned。这太棒了。
现在我将此自定义方法 添加到存储库:
List<Booking> findByApplicant(@Param("applicant") Person applicant);
当客户端用.../rest/bookings/search/findByApplicant?applicant=5
调用它时,似乎没有办法请求details
投影。以下尝试将被忽略:
- 向查询字符串添加
&projection=details
使方法始终return BookingDetails
:
List<BookingDetails> findByApplicant(@Param("applicant") Person applicant);
总结,自定义搜索方法 (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
如果您不能让它以这种方式工作,那么获得一个 运行 示例项目来查看会很酷。
我正在使用 Spring 数据 REST 2.1。4.RELEASE。
我创造了
- 实体
Booking
、 - 其 REST 存储库(扩展
CrudRepository
)名为BookingRepository
- 和一个投影
BookingDetails
(用@Projection(name="details", types = Booking.class)
注释)return它的一些链接实体爆炸了,例如Resource
、Activity
、Applicant
等
客户端获得所有使用 .../rest/bookings
的预订,并且 JSON 响应包括链接实体的链接。如果它添加 ?projection=details
,则链接的实体将被分解并 returned。这太棒了。
现在我将此自定义方法 添加到存储库:
List<Booking> findByApplicant(@Param("applicant") Person applicant);
当客户端用.../rest/bookings/search/findByApplicant?applicant=5
调用它时,似乎没有办法请求details
投影。以下尝试将被忽略:
- 向查询字符串添加
&projection=details
使方法始终return
BookingDetails
:List<BookingDetails> findByApplicant(@Param("applicant") Person applicant);
总结,自定义搜索方法 (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
如果您不能让它以这种方式工作,那么获得一个 运行 示例项目来查看会很酷。