java - 第 1 页上方的 PageRequest 返回相同的结果
问题描述
我有以下 get 函数,它应该返回带有可选规范的页面内的行程。
@GetMapping("/trip")
Page<Trip> all(@SearchSpec Specification<Trip> specs,
@RequestParam(defaultValue = "0") int page,
@RequestParam(defaultValue = "1000") int pageSize) {
//return repository.findAll(Specification.where(specs));
return repository.findAll(Specification.where(specs), PageRequest.of(page, pageSize, Sort.by("searchKey").ascending()));
}
现在,当我向我的 API 发出以下请求时:
http://localhost:8080/trip?page=0&pageSize=2&search=departureAirport:'AMS'
我从我的 API 中取回 2 条记录(行程),这是正确的。当我将请求更改为:
http://localhost:8080/trip?page=1&pageSize=2&search=departureAirport:'AMS'
所以到下一页,我从我的 API 获得接下来的 2 条记录(行程),这也是正确的,但是只要我想转到第 2 页,API 就会返回与第 1 页相同的记录。所以页面上方的每一页1 返回相同的记录。
我可以增加 pageSize,当我这样做时,API 返回更多记录,但再次高于 1 的每个页面都返回相同的记录。所以只有第0页和第1页的数据不同。
我尝试删除规范和排序,但这并没有解决问题。
解决方案
我最终使用了自己的分页算法,因为问题可能与 Sqlite 有关,我不想更改我的数据库客户端。我最终在我的 Get 请求中使用了以下代码:
List<Trip> trips = repository.findAll(Specification.where(specs));
if (sort.equals("desc")) trips.sort(Collections.reverseOrder());
if(page > 0) {
if ( page == 1) {
trips = trips.subList(0, pageSize);
} else {
trips = trips.subList(((page - 1) * pageSize), page * pageSize);
}
}
return trips;
推荐阅读
- python - 一个索引列到多索引
- html - 定位img和背景
- ansible - 如何从 Ansible 自定义模块中获取数据
- ruby-on-rails - 如何避免belongs_to_required_by_default 被gem 覆盖?
- javascript - 有没有办法从谷歌浏览器扩展读取加载在谷歌浏览器标签中的pdf?
- python - 在 for 循环期间修改 range()
- c++ - 无法在 linux 中运行 mpicc
- c# - 在 C# 中,为什么某些 NuGet 包被命名为 Repacked,例如 Unity.Repacked?
- bootstrap-4 - 使用全宽拆分颜色/图像拆分容器约束内容
- flutter - hooks_riverpod:使用 Riverpod 进行 Flutter Firebase 身份验证,发生错误:提供者试图将“null”分配给不可为空的“exposedvalue”