我很困惑。我找不到如何将自定义“搜索”方法与在 spring-data-rest 的帮助下加载的方法一起定义。 你能回答我吗,这个框架有这种“开箱即用”的可能性吗? 如果有,你能告诉我,我在哪里可以找到它吗?
为了更深入地了解我的情况,我描述了我的问题:
class UserService {
public String getListOfWaitingUsers() {
return userRepository.findAll(UserSpecification.isWaiting());
}
}
public interface UserRepository extends PagingAndSortingRepository<User, Long>{
Page<User> findByNameLike(@Param("name") String name, Pageable pageable);
}
我希望它是这样的:
/user/search/
findByNameLike
findWaitingUsers
如何实现我的规范或服务方法(存储库中没有方法)将定义路径“/resource_name/search/METHOD_NAME”(存储库方法 +(方法服务或规范)
最佳答案
- Spring Data REST 框架基于Spring Data Respository,所以你的服务类在这里可以忽略。
- 所有不属于 CRUD/Paging Repository 的方法都公开为“搜索”方法,前提是您使用 @Param 注释对所有参数进行了注释。所以在你的情况下,你需要在 conventions outline in Spring Data commons docs 之后实现你的方法.因此,一旦您实现了
findByNameLike
方法,该方法就会公开为../search/findByNameLike
URL。如果需要,您可以使用@RestResource
注释自定义 rel 和路径。 另请注意,理想情况下,您的
UserRepository
应该只对User
对象以及您定义的方法起作用。在你的例子中,UserRepository
返回Process
/ProcessContext
对象?相反,它应该像下面这样public interface UserRepository extends PagingAndSortingRepository<User, Long>{ Page<User> findByNameLike(@Param("name") String name, Pageable pageable); }
关于java - 使用 spring-data-rest 定义路径为 "/{resourcename}/search/"的自定义方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23340321/