Spring Data Rest是否支持Spring Data的表达式运算符,例如。之间,GreaterThan?

时间:2014-05-28 01:30:14

标签: java spring jpa spring-data spring-data-rest

我知道Spring Data Common支持使用运算符(例如BetweenLessThanGreaterThanLike作为属性表达式的查询(存储库中的方法)。

我想知道Data Rest是否也支持这些运营商?如果支持,使用这些运算符时Rest API URL会是什么样子。例如,如果我需要查询年龄介于20到30之间的人。 存储库中的查询应为List<Person> findByAgeBetween(Long min, Long max); 但是URL是什么?

我在春季参考文献中找不到与此问题相关的任何内容。

3 个答案:

答案 0 :(得分:2)

Tl;是的,Spring Data Rest支持额外的约束。

如果您访问http://spring.io/guides?filter=spring-data%20rest,您会看到有关Spring Data Rest的几个指南。它们涵盖了几个数据存储。他们甚至展示定制发现者。实质上,您只受每个基础Spring Data项目支持的标准的约束。

Spring Data Rest只是将Web调用及其参数映射到您定义的存储库接口方法。实际上执行finder方法留给了底层的Spring Data项目。

最重要的是,你可以毫无问题地使用额外的标准。

答案 1 :(得分:1)

在1.1文档中,您可以找到this example

以下内容将使用PersonRepository上定义的findByNameStartsWith查询方法,查找名称以字母“K”开头的所有Person实体,并添加按名称属性按降序排序结果的排序数据:

curl -v http://localhost:8080/people/search/nameStartsWith?name=K&sort=name&name.dir=desc

所以在你的情况下,它将是:

curl -v http://localhost:8080/person/search/ageBetween?min=xxx&max=yyy

答案 2 :(得分:1)

所以我在这里假设您拥有以下存储库:

interface PersonRepository extends CrudRepository<Person, Long> {

  List<Person> findByAgeBetween(Long min, Long max);
}

基于此,您将获得以下资源:

  1. 一般描述的集合资源here名为persons(我们默认使用复数库,但您可以使用@RepositoryRestResource调整这些名称和路径。)
  2. 对于集合中的每个元素,通常描述为here的项资源。
  3. 一般描述为here的名为search的搜索资源。它包含指向各个查询方法资源的链接列表(参见下文)。
  4. 每个查询方法的查询方法资源,如一般所述here。参数名称需要使用@Param注释来定义,就像8之前的Java版本一样,接口方法不带有命名信息,因此我们无法找到它。这意味着改进的存储库声明将如下所示:

    interface PersonRepository extends CrudRepository<Person, Long> {
    
      List<Person> findByAgeBetween(@Param("min") Long min, @Param("max") Long max);
    }
    

    当您访问搜索资源时,这将导致以下输出:

    _links : {
      self : { href : "…" },
      findByAgeBetween : {
        href : "…/persons/search/findByAgeBetween{?min,max}",
        templated : true
      }
    }
    
  5. 现在客户端会继续,找到名为findByAgeBetween的链接,认识到它是RFC 6570 Uri template(通过HAL spec建议的templated参数)并展开具有minmax的适当值的模板。

    这里的重要方面是只要参数名称保持不变,服务器就可以自由更改URI结构。您可以继续使用路径变量而不是请求参数等。通过使用模板方法,客户端不需要知道结构。它一般只知道模板变量。

    可以使用查询方法上的@RestResource自定义链接名称和路径。