You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot Controller中通过GET方法传递Pageable参数的问题

问题解决:GET请求传递分页参数到Spring Pageable

错误原因

你当前的写法存在两个核心问题:

  1. GET请求不应使用@RequestBody:HTTP规范中GET请求通常不携带请求体,Spring对GET请求的@RequestBody处理存在限制,同时这也不符合RESTful设计规范。
  2. Pageable是抽象接口:org.springframework.data.domain.Pageable属于抽象类型,Jackson无法直接实例化该类,这就是报错提示“无法构造Pageable实例”的根本原因。

正确实现方式

方式一:利用Spring Data Web自动绑定(推荐)

Spring Data Web模块会自动将URL请求参数绑定到Pageable对象,只需移除@RequestBody注解即可:

@GetMapping
ResponseEntity<Page<PostDto>> getPostList(Pageable pageable) {
    final Page<PostDto> response = postService.getPostList(pageable);
    // 省略其他代码
}

请求时直接在URL后拼接参数:

GET /你的接口路径?page=0&size=3
  • 默认参数名:page(对应页码,从0开始)、size(每页条数)
  • 如需指定默认值,可配合@PageableDefault注解:
@GetMapping
ResponseEntity<Page<PostDto>> getPostList(@PageableDefault(page = 0, size = 3) Pageable pageable) {
    final Page<PostDto> response = postService.getPostList(pageable);
    // 省略其他代码
}

方式二:手动接收参数并构造Pageable

如果需要自定义参数名或更灵活的控制,可以手动接收参数,再构造PageRequest(Pageable的实现类):

@GetMapping
ResponseEntity<Page<PostDto>> getPostList(
        @RequestParam(name = "pageNumber", defaultValue = "0") int pageNumber,
        @RequestParam(name = "pageSize", defaultValue = "3") int pageSize) {
    Pageable pageable = PageRequest.of(pageNumber, pageSize);
    final Page<PostDto> response = postService.getPostList(pageable);
    // 省略其他代码
}

此时请求URL为:

GET /你的接口路径?pageNumber=0&pageSize=3

内容的提问来源于stack exchange,提问作者Jack

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 05:45:31