我正尝试PersonRepository按照1.3数据仓库的自定义实现中的描述将自定义方法添加到我的Spring数据仓库,并通过REST公开这些方法。初始代码来自使用REST示例访问JPA数据,这是添加/修改的类的代码:
PersonRepository
interface PersonRepositoryCustom { List<Person> findByFistName(String name); } class PersonRepositoryImpl implements PersonRepositoryCustom, InitializingBean { @Override public void afterPropertiesSet() throws Exception { // initialization here } @Override public List<Person> findByFistName(String name) { // find the list of persons with the given firstname } } @RepositoryRestResource(collectionResourceRel = "people", path = "people") public interface PersonRepository extends PagingAndSortingRepository<Person, Long> { List<Person> findByLastName(@Param("name") String name); }
运行应用程序并访问时http://localhost:8080/portfolio/search/,我得到以下响应正文:
http://localhost:8080/portfolio/search/
{ "_links" : { "findByLastName" : { "href" : "http://localhost:8080/people/search/findByLastName{?name}", "templated" : true } } }
为什么findByFirstName即使在PersonRepository界面中可用也不暴露?
findByFirstName
另外,有没有办法动态/以编程方式添加要通过REST公开的存储库?
这些方法未公开的原因是,您基本上可以自由地在自定义存储库方法中实现所需的任何内容,因此不可能推理出支持该特定资源的正确HTTP方法。
在您的情况下,使用Plain可能很好GET,在其他情况下,可能必须使用a,POST因为该方法的执行会产生副作用。
GET
POST
当前的解决方案是设计一个自定义控制器来调用存储库方法。