blu*_*ish 9 java rest spring projection spring-data-rest
我正在使用Spring Data REST 2.1.4.RELEASE.
我建立
Booking,CrudRepository)命名BookingRepositoryBookingDetails(带有加注解的@Projection(name="details", types = Booking.class)用于返回它的一些链接的实体的)分解,例如Resource,Activity,Applicant等.客户端获取所有预订,.../rest/bookingsJSON响应包括链接实体的链接.如果添加,?projection=details则链接的实体将被展开并返回.这很棒.
现在我将这个自定义方法添加到存储库:
List<Booking> findByApplicant(@Param("applicant") Person applicant);
Run Code Online (Sandbox Code Playgroud)
当客户端调用它时.../rest/bookings/search/findByApplicant?applicant=5,似乎无法请求details投影.以下尝试被忽略:
&projection=details到查询字符串使方法始终返回BookingDetails:
List<BookingDetails> findByApplicant(@Param("applicant") Person applicant);
Run Code Online (Sandbox Code Playgroud)总而言之,自定义搜索方法(findBy*)永远不会返回投影.除非您使用注释存储库@RepositoryRestResource(excerptProjection = BookingDetails.class),但这会导致一些问题,首先客户端必须始终使用相同的投影.我们如何允许用户也使用findBy*方法投影?
Oli*_*ohm 15
我使用Spring Data REST 2.2.1验证了这一点,所以请更新它.确保您的客户端实际上按预期发送所请求的参数.在调试时,我发现如果你没有明确引用URI,例如cURL会丢弃查询参数.所以这:
curl http://localhost:8080/orders/search/findByApplicant?applicant=5&projection=details
Run Code Online (Sandbox Code Playgroud)
将不会发送任何查询参数.一旦引用URI,它就会.
curl 'http://localhost:8080/orders/search/findByApplicant?applicant=5&projection=details'
Run Code Online (Sandbox Code Playgroud)
对于越来越受欢迎的HTTPie,有相同的排序.有了它,所需的语法是:
http :8080/orders/search/findByApplicant applicant==5 projection==details
Run Code Online (Sandbox Code Playgroud)
如果您无法以这种方式工作,那么查看正在运行的示例项目会很酷.
| 归档时间: |
|
| 查看次数: |
9109 次 |
| 最近记录: |