5 java spring jpa spring-data spring-boot
在我的 Spring Boot Rest 服务中,我想实现一个带有分页的 getAll 方法,以便稍后在前端进行延迟加载。
目前,如果我想要第一组行,我必须向第 0 页请求。在 application.properties 中插入以下配置后,它应该可以工作... spring.data.web.pageable.one-indexed-parameters=true ...但事实并非如此。
有谁知道为什么或者这是一种遗留方式?我在 2.0.4.RELEASE 版本中使用 spring-boot-starter-web 和 data-jpa 。
多谢!
编辑,这里是服务方法,也许PageRequest无法处理这个。
public List<TransactionResponseDTO> findAll(int pageNumber, int pageSize) {
List<TransactionResponseDTO> transactionResponseDTOs = new ArrayList<>();
PageRequest pageRequest = PageRequest.of(pageNumber, pageSize);
List<TransactionEntity> transactionEntities =
transactionRepository.findAll(pageRequest).getContent();
for (TransactionEntity transactionEntity : transactionEntities) {
transactionResponseDTOs.add(convert(transactionEntity));
}
return transactionResponseDTOs;
}
Run Code Online (Sandbox Code Playgroud)
属性spring.data.web.pageable.one-indexed-parameters=true仅控制如何将分页参数自动绑定到 Web 请求处理程序方法的Pageable参数的行为。
情况 1:默认行为是spring.data.web.pageable.one-indexed-parameters=false ,当使用http://localhost:8080/api/customers发出请求时?页=5
@GetMapping("/api/customers")
public List<Customer> getCustomers(Pageable pageable) {
//here pageable.getPageNumber() == 5
Page<Customer> customersPage = customerRepository.findAll(pageable);
//here customersPage.getNumber() == 5
}
Run Code Online (Sandbox Code Playgroud)
情况 2:使用spring.data.web.pageable.one-indexed-parameters=true并且使用http://localhost:8080/api/customers?page=5发出请求时
@GetMapping("/api/customers")
public List<Customer> getCustomers(Pageable pageable) {
//here pageable.getPageNumber() == 4
Page<Customer> customersPage = customerRepository.findAll(pageable);
//here customersPage.getNumber() == 4
}
Run Code Online (Sandbox Code Playgroud)
请注意,一旦您获取数据PagecustomersPage,如果您检查customersPage.getNumber() ,它将仅返回pageable.getPageNumber()中的内容,即 4。我们可能期望 5,希望单索引参数会使用 1- 返回 5基于索引但事实并非如此。
您需要向您的存储库添加分页支持,您需要扩展
PagingAndSortingRepository<T,ID>
Run Code Online (Sandbox Code Playgroud)
界面而不是基本
CrudRepository<T,ID>
Run Code Online (Sandbox Code Playgroud)
界面。这添加了接受 Pageable 的方法来控制返回结果的数量和页数。
public Page findAll(Pageable pageable);
Run Code Online (Sandbox Code Playgroud)
在这里检查https://docs.spring.io/spring-data/rest/docs/2.0.0.M1/reference/html/paging-chapter.html
| 归档时间: |
|
| 查看次数: |
7038 次 |
| 最近记录: |