一尘不染

实现Spring Data存储库的自定义方法并通过REST公开它们

java

我正尝试PersonRepository按照1.3数据仓库的自定义实现中的描述将自定义方法添加到我的Spring数据仓库,并通过REST公开这些方法。初始代码来自使用REST示例访问JPA数据,这是添加/修改的类的代码:

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/,我得到以下响应正文:

{
  "_links" : {
    "findByLastName" : {
      "href" : "http://localhost:8080/people/search/findByLastName{?name}",
      "templated" : true
     }
  }
}

为什么findByFirstName即使在PersonRepository界面中可用也不暴露?

另外,有没有办法动态/以编程方式添加要通过REST公开的存储库?


阅读 218

收藏
2020-09-08

共1个答案

一尘不染

这些方法未公开的原因是,您基本上可以自由地在自定义存储库方法中实现所需的任何内容,因此不可能推理出支持该特定资源的正确HTTP方法。

在您的情况下,使用Plain可能很好GET,在其他情况下,可能必须使用a,POST因为该方法的执行会产生副作用。

当前的解决方案是设计一个自定义控制器来调用存储库方法。

2020-09-08