Spring框架中是否有一个预构建的框架来处理基于游标的分页?

问题描述 投票:0回答:1

我希望在多个 Spring 微服务 API 的大量端点上实现基于游标的分页。 我正在寻找一个依赖项,我可以以与默认情况下在 spring-boot 中处理偏移分页相同或相似的方式注入和实现。

换句话说:

  • 标准化页面响应和请求对象。
  • 标准化注释。

Spring 内置了使用偏移分页的处理:

public Page<SomeDTO> nextPage(@PageableDefault(size = 5, sort = "createdAt", direction = Sort.Direction.DESC) Pageable pageable,
                    @ApiParam(name = "tabFilter") @RequestParam(value = "tabFilter", required = false, defaultValue = "CREATED_BY_ME") String tabFilter,
                    @ApiParam(name = "status") @RequestParam(value = "status", required = false) String status,
                    ...){

但我需要一种类似的方法来跨类标准化它(最好不要构建自定义 DTO/注释。

使用:

Java 8
Spring启动2.4.2
春天 5.3.3

java spring spring-boot rest pagination
1个回答
0
投票

有点晚了,但终于有一个了:https://github.com/p3t/spring-cursorpaging

它支持使用任意顺序/过滤器设置以及自定义标准查询过滤器构建

PageRequest
。 示例:

public void queryData() {
    final PageRequest<DataRecord> request = PageRequest.create( b -> b.pageSize( 5 )
            .desc( Attribute.path( DataRecord_.auditInfo, AuditInfo_.createdAt ) )
            .asc( Attribute.path( DataRecord_.auditInfo, AuditInfo_.modifiedAt ) )
            .asc( DataRecord_.id ) );

    final Page<DataRecord> page = dataRecordRepository.findPage( request );
    page.forEach( System.out::println );
}

为了设计您的 API,支持游标的序列化和加密。

// from base64 string:
final PageRequest<DataRecord> request = cursor.map( serializer::toPageRequest )
            .orElseGet( () -> PageRequest.create( b -> b.asc( DataRecord_.name ).asc( DataRecord_.id ) ) )
            .withPageSize( pageSize.orElse( 10 ) );
// to base64 string
private Link getLink( final Optional<Integer> pageSize, final PageRequest<DataRecord> request,
          final LinkRelation rel ) {
    return linkTo( methodOn( DataRecordController.class ).getDataRecordPage( pageSize,
            Optional.of( serializer.toBase64( request ) ) ) ).withRel( rel ).expand();
  }

对于如何设计 API 的方式没有限制(传递初始过滤器/顺序参数,以及如何返回链接 - 我仍然建议使用 Spring 的 Hateos 支持。

可以在这里找到完整的示例Web应用程序:https://github.com/p3t/spring-cursorpaging/tree/main/cursorpaging-examples/webapp-with-maven

© www.soinside.com 2019 - 2024. All rights reserved.