在我的 Boot 服务中,我想实现一个带有分页的getAll方法,以便稍后在前端进行惰性加载。
现在我必须用页面0请求第一组行。在www.example.com中插入以下配置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;
}
5条答案
按热度按时间tjrkku2a1#
属性spring.data.web.pageable.one-indexed-parameters=true仅控制如何将分页参数自动绑定到Web请求处理程序方法的Pageable参数的行为。
情况1:默认行为是spring.data.web.pageable.one-indexed-parameters=false并且在发出 * http://localhost:8080/api/customers?page=5的请求时*
情况2:使用spring.data.web.pageable.one-indexed-parameters=true且使用http://localhost:8080/api/customers?page=5发出请求时
请注意,一旦您获得数据Page customersPage,如果您选中customersPage.getNumber(),它将简单地返回**pageable.getPageNumber()**中的内容,即4。我们可能期望5,希望使用基于1的索引,one-indexed-parameters将返回5,但事实并非如此。
jhkqcmku2#
xqk2d5yq3#
我认为这是一个错误。请参阅https://github.com/spring-projects/spring-boot/issues/14413
SpringDataWebAutoConfiguration
应该在RepositoryRestMvcAutoConfiguration
之前,这使得PageableHandlerMethodArgumentResolverCustomizer
不起作用,因此配置ymlspring.data.web.pageable
不起作用ddhy6vgd4#
您需要为存储库添加分页支持,您需要扩展
而不是基本的
这将添加接受Pageable以控制返回结果的数量和页数的方法。
在此检查https://docs.spring.io/spring-data/rest/docs/2.0.0.M1/reference/html/paging-chapter.html
huus2vyu5#
在互联网上有很多关于这方面的困惑。这里是阅读更多关于它的链接https://github.com/spring-projects/spring-boot/issues/14413。
因为这不是解决原来问题的办法,但它可能有助于处理这个问题。
创建一个实用程序类来创建
PageRequest
,然后解析从存储库中获取的页面的分页信息。解释它只是减少了请求中的页码,增加了响应中的页码。这就是API使用者总是拥有一个索引页的原因。
PagintUtils
类。例如在服务层中使用它。
它将在json中返回,如下所示。
PagingInfoDto
类别