Spring Boot:以 Pageable 作为请求参数的 @GetMapping 无法按预期工作

Posted

技术标签:

【中文标题】Spring Boot:以 Pageable 作为请求参数的 @GetMapping 无法按预期工作【英文标题】:Spring Boot: @GetMapping with Pageable as request parameter don't work as expected 【发布时间】:2020-01-17 05:59:53 【问题描述】:

我正在使用 Spring Boot 2,并且我在 @GetMapping 中编写了一个 @RestController,它以 Pageable 作为参数。

@GetMapping
public ResponseEntity<Page<AppointmentTO>> findAll(Pageable pageable) 
    Page<AppointmentTO> page = appointmentService.findAll(pageable);
    return ResponseEntity.ok(page);

问题如下:

通过每个请求,queries-parameters pageSizeoffset 在到达 Spring Boot 后端 (?offset=0&amp;pageSize=20) 时始终重置为默认值,但是我在我的请求的网址(例如?offset=15&amp;pageSize=5)。

【问题讨论】:

【参考方案1】:

Spring Boot 将请求参数映射到扩展 AbstractPageRequestorg.springframework.data.domain.PageRequest

  AbstractPageRequest implements Pageable, Serializable 
    ...
    private final int page;
    private final int size;

    public long getOffset() 
        return (long)this.page * (long)this.size;
    
    ...

您应该使用以下网址:

http://localhost:8080?page=3&size=5

您也可以通过 ...&sort=name 添加排序

【讨论】:

或者自定义参数名称:docs.spring.io/spring-data/jpa/docs/current/reference/html/…和docs.spring.io/spring-data/commons/docs/current/api/org/…

以上是关于Spring Boot:以 Pageable 作为请求参数的 @GetMapping 无法按预期工作的主要内容,如果未能解决你的问题,请参考以下文章

Spring Boot - Jpa Distinct 和 Pageable

如何记录Spring Boot JPA Pageable绑定值?

Spring Boot,MongoDB,Pageable,按对象中的自定义方法排序

Spring Boot:Slice/Pageable 未根据页面返回正确的块

如何使用 Pageable 在 Spring Boot 和 Thymeleaf 中显示按点赞数排序的技能列表?

如何在spring boot中使用Pageable接口从http url中删除/处理不相关或错误的排序参数?