当前位置: 首页 > 面试题库 >

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

仲孙才捷
2023-03-14
问题内容

我正尝试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公开的存储库?


问题答案:

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

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

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



 类似资料:
  • 为什么即使在接口中可用也不公开? 另外,是否有一种方法可以动态地/以编程方式添加要通过REST公开的资源库?

  • 问题内容: 据我所知,当我使用spring-data-rest时,此方法没有公开。有什么方法可以将其发布为spring-data-rest生成的REST API的一部分(无需自己创建Spring MVC Controller)? 问题答案: 我检查了代码库-似乎他们已明确禁用了自定义方法-不知道为什么。这是来自org.springframework.data.repository.core.sup

  • 我已经向jpa存储库添加了一个自定义方法,如http://docs.spring.io/spring-data/data-jpa/docs/1.0.x/reference/html/#repositories.custom-实施情况 就我所见,当我使用spring数据rest时,这个方法并没有公开。是否有任何方法可以将其发布为spring data REST生成的REST API的一部分(无需自己

  • 假设我想有一个方法,它是获得超级主要客户,它有。 其中声明了方法。 然后我的公开存储库界面变成以下内容: 它扩展了和my。 我写的 bot不知道,在实现中写什么。如何接触客户?

  • 在我的项目中有几个实体具有相同的属性(对于示例'name'),所以,有可能创建一个存储库,其中使用自定义的select(实体)?因此,我从JpaRepository扩展了我的存储库,我扩展了MyCustomJpaRepository,MyCustomJpaRepository也扩展了JpaRepository,使其能够从JpaRepository授予基本功能? TKS

  • 我有一个罐子,里面有一个蚂蚁任务。我的com/mebigfatguy/stringliterals/antlib.xml是 运行jar tf StringLiterals.jar 我将jar放入~/.ant/lib中,当我尝试运行引用它的任务时,如下所示: 我得到了 文字: 这里的GitHub项目https://GitHub.com/mebigfatguy/stringliterals