我正在使用Spring Data REST 2.1.4.RELEASE。
我创建了:
- 一个名为
Booking
的实体, - 其REST库(扩展
CrudRepository
)名为BookingRepository
, - 以及一个投影
BookingDetails
(注释为@Projection(name =“details”,types = Booking.class)
),用于返回一些爆炸的链接实体,例如Resource
,Activity
,Applicant
等。
客户端可以通过.../rest/bookings
获取所有预订,并且JSON响应包括链接到相关实体的链接。如果添加?projection=details
,则链接的实体将被爆炸并返回。这很好。
现在我在存储库中添加了此自定义方法:
List<Booking> findByApplicant(@Param("applicant") Person applicant);
当客户端使用
.../rest/bookings/search/findByApplicant?applicant=5
调用时,似乎没有办法请求details
投影。以下尝试将被忽略:
- adding
&projection=details
to the query string making the method always return
BookingDetails
:List<BookingDetails> findByApplicant(@Param("applicant") Person applicant);
findBy*
)永远不会返回投影。除非您使用@RepositoryRestResource(excerptProjection = BookingDetails.class)
注释存储库,但这会导致一些问题,首先是客户端必须始终使用相同的投影。那么我们如何允许用户在使用findBy*
方法时也可以使用投影呢?
.../rest/bookings/search/findByApplicant?applicant=5
这样的 URL 并不是很符合 RESTful 的规范。那么.../rest/bookings?applicant=5
呢? - user1907906/foo
还是/conquer/the/world
都是完全无关紧要的。话虽如此,Spring Data REST利用超媒体让客户端导航到资源,因此资源ID的结构甚至变得不再重要了:)。 - Oliver Drotbohm