6. 分页和排序

This文件Spring Data REST中的Spring REST数据的使用和排序抽象。要熟悉使用这些功能,请参阅你的using.实施Spring Data REST文件

6.1. 分页

而不是从一个大的结果集返回所有东西,Spring Data REST承认某些URL参数会影响页面大小和起始页码。

如果扩展PagingAndSortingRepository<T,ID>和访问所有实体的名单,你会得到链接到前20个实体。要设置页面大小,任何其他数字,添加一个size参数:

http://localhost:8080/people/?size=5

这段代码将设置页面大小为五页

如果要在自己的查询方式使用分页,您需要更改方法签名去接受一个额外的Pageable参数,并返回一个Page而非List。例如,下面的查询方法将出口到/people/search/nameStartsWith,将支持分页:

@RestResource(path ="nameStartsWith", rel ="nameStartsWith")publicPage findByNameStartsWith(@Param("name")String name,Pageable p);

Spring Data REST出口将识别返回Page,让您在响应体内的结果,就像它与非分页反应,但其他链接将被添加到资源来表示上一个和下一个数据的页。

每个页面响应将返回链接到基于使用IANA定义的链接关系[prev]当前页面(http://www.w3.org/TR/html5/links.html#link成果的上一页和下一页型 - 上一个)和[next](http://www.w3.org/TR/html5/links.html#link-type-next)。 如果你目前正处于结果的第一页,但是,没有prev链接将被渲染。同样是结果的最后一页真:没有'next`链接将被渲染。

请看下面的例子中,我们将页面大小设置为5:

curl localhost:8080/people?size=5
{"_links":{"self":{"href":"http://localhost:8080/persons{&sort,page,size}",(1)"templated":true},"next":{"href":"http://localhost:8080/persons?page=1&size=5{&sort}",(2)"templated":true}},"_embedded":{... data ...},"page":{(3)"size":5,"totalElements":50,"totalPages":10,"number":0}}

在顶部,我们可以看到_links

1 这个self链接提供了整个收集与一些选项
2 next链接指向下一个页面,假设在同一页面大小。
3 在底部是关于页面设置额外的数据,包括页面的大小,总的元素,总页数,目前正在查看的页面数。
当使用工具,如curl卷曲在命令行,如果你有一个引号“&”在声明中,包住整个URL。

同样重要的是要注意到selfnext的URI,事实上是URI模板。他们接受不只是size,而且pagesort可选标志。

如所提到的,在HAL文档的底部,是关于页面细节的集合。这种额外的信息使得它很容易为你配置UI工具,比如滑块或指标来反映整体状况的用户在查看数据。例如,上面的文件表明,我们正在寻找在第一页(有页码索引到0是第一个)。

如果我们按照'next`链接会发生什么?

$ curl "http://localhost:8080/persons?page=1&size=5"
{"_links":{"self":{"href":"http://localhost:8080/persons{&sort,projection,page,size}","templated":true},"next":{"href":"http://localhost:8080/persons?page=2&size=5{&sort,projection}",(1)"templated":true},"prev":{"href":"http://localhost:8080/persons?page=0&size=5{&sort,projection}",(2)"templated":true}},"_embedded":{... data ...},"page":{"size":5,"totalElements":50,"totalPages":10,"number":1(3)}}

这看起来非常相似,除了以下差异:

1 现在的“next”链接指向另一个页面,表明它的相对角度对 self的链接。
2 现在似乎prev链接,给我们一个路径前一页。
3 目前的数量是1(显示第二页)

这一特性使它很容易可选的按钮在屏幕上映射到这些超媒体控制,因此可以很容易地使导航功能的UI体验不用硬编URI。事实上,可以授权用户从列表中选择页面大小,动态更改内容服务,而无需重写nextprev控制顶部或底部。

6.2. 排序

Spring Data REST参数排序使用存储库分类的支持。

结果排序在一个特定的属性,添加一个sortURL参数和属性的名称你想进行排序的结果中。你可以控制的方向通过添加一个,属性名称ascdesc。下面将使用findByNameStartsWith查询方法定义在所有 PersonPersonRepository实体以字母"K"开头的名称并添加订单数据,结果在降序排列的name属性:

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

排序结果由多个属性,不断添加尽可能多的sort=PROPERTY的参数,它们将被按照出现在查询字符串中的顺序添加到Pageable

results matching ""

    No results matching ""