我正在使用spring-data-rest-webmvc 2.0.0.RELEASE w / spring-data-jpa 1.5.0.RELEASE。
我有一个RoomRepository,RoomRepositoryCustom和RoomRepositoryImpl类。
我正在尝试覆盖findBy *方法,以便我可以提供自定义逻辑来执行@PostFilter的工作,但返回分页结果。
我最初在RoomRespository中有这个:
@PostFilter("hasPermission(filterObject, '" + FIND + "')")
@RestResource(rel = "byName", path = "byName")
public List<Room> findByName(@Param("name") String name);
效果很好,但是由于@PostFilter的限制,我必须返回一个List并且不能返回一个Page。
我想像这样取消@PostFilter:
@RestResource(rel = "byName", path = "byName")
public Page<Room> findByName(@Param("name") String name, Pageable p);
但是我仍然需要通过经过身份验证的用户的主体来过滤我的结果。 (我希望在我的自定义方法中做到这一点)
所以我认为我可以通过在RoomRespositoryImpl中提供一个实现来覆盖findByName,但这似乎无法正常工作。如果我尝试覆盖findByName,那么Spring Data REST将不再选择该方法,并且永远不会为rooms/search/byName?name="test"
注册一个端点。
我还尝试使用@Query为finder定义自定义查询。它有效,但我认为它不适用于我的目的,因为我需要使用经过身份验证的用户的主体作为查询参数。
总结:如何最好地实现一个/ rooms / search / byName?name =“test”端点,使用Spring Data REST返回一个包含参数名称的房间页面,但也是我自己过滤的基于在单独的表中查找当前经过身份验证的用户权限的自定义逻辑?
有没有办法在/ rooms / search / *?
下添加自定义链接