使用org.springframework.data.domain.Pageable
接口类型作为入参即可实现查询列表的分页和排序,见下面例子:
@RequestMapping(value = "blogs", method=RequestMethod.GET)
public Page<Blog> getEntryByPageable(@PageableDefault(value = 15, sort = { "id" }, direction = Sort.Direction.DESC)
Pageable pageable) {
return blogRepository.findAll(pageable);
}
当Spring发现这个参数时,会自动的根据request的参数来组装该pageable对象,Spring支持的request参数如下:
- page,第几页,从0开始,默认为第0页
- size,每一页的大小,这里设置为15
- sort,排序相关的信息,以property,property(,ASC|DESC)的方式组织,例如sort=firstname&sort=lastname,desc表示在按firstname正序排列基础上按lastname倒序排列
结果如下:
{
"content":[
{"id":123,"title":"blog122","content":"this is blog content"},
...
{"id":109,"title":"blog108","content":"this is blog content"}],
"last":false,
"totalPages":9,
"totalElements":123,
"size":15,
"number":0,
"first":true,
"sort":[{
"direction":"DESC",
"property":"id",
"ignoreCase":false,
"nullHandling":"NATIVE",
"ascending":false
}],
"numberOfElements":15
}
上述json字段说明如下:
- content: 以id倒序排列的15条数据
- last: 当前页不是最后一页,后面还有数据
- totalPages: 总共有9页
- size: 每页大小为15
- number: 当前页为第0页
- first: 当前页是第一页
- sort: 当前页是以id倒序排列的
- numberOfElements: 当前页一共有15条数据