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

Spring Boot GET接口如何同时传递Pageable对象与查询参数DTO?

问题解决方案

你的接口是GET类型,Spring MVC会自动将URL的查询参数绑定到TaskSearchParams和Pageable两个参数对象上,不需要封装JSON请求体(GET请求按HTTP规范也不建议携带请求体,多数服务端、网关会直接忽略GET请求的Body内容)。两个对象的参数直接平铺开作为查询参数即可,不需要嵌套结构,Spring会自动匹配字段注入到对应参数中。

注意事项

  • Pageable的默认请求参数名和你尝试传的JSON字段有差异,需调整:
    • 页码参数名为page(不是pageNumber,Spring默认页码从0开始,若要从1开始需要额外配置分页解析器)
    • 每页数量参数名为size
    • 排序参数名为sort,格式为sort=排序字段,排序方向,例如按id倒序就是sort=id,DESC,支持多字段排序,传多个sort参数即可
    • 不需要手动传offset,Spring会自动根据page和size计算偏移量
  • TaskSearchParams的参数直接用字段名作为查询参数名传即可

示例请求

比如要查询title为月度报表任务,status为SUCCESS,每页1条,查第1页(对应page=0,默认从0开始),按创建时间倒序的请求示例:

完整URL示例

http://你的服务地址/task?title=月度报表任务&status=SUCCESS&page=0&size=1&sort=createTime,DESC

curl请求示例

curl --location --request GET 'http://你的服务地址/task?title=月度报表任务&status=SUCCESS&page=0&size=1&sort=createTime,DESC'

Postman等工具使用方式

直接在Params标签页中添加对应键值对即可,不需要配置Body:

参数名参数值
title月度报表任务
statusSUCCESS
page0
size1
sortcreateTime,DESC

特殊场景:需要传JSON请求体

如果你的业务场景确实需要传JSON结构,需要修改接口定义为POST请求,将两个参数封装到同一个请求DTO中,再添加@RequestBody注解:

// 统一请求DTO
@Getter
@Setter
public class TaskPageRequest {
    private TaskSearchParams searchParams;
    private Pageable pageable;
}

// 调整后的接口
@RequestMapping(method = RequestMethod.POST, value = "/task", produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<?> processTask(@Valid @RequestBody TaskPageRequest request)
{
    TaskSearchParams params = request.getSearchParams();
    Pageable pageable = request.getPageable();
    // 原有业务逻辑
    return new ResponseEntity<>(....., HttpStatus.OK);
}

调整后你就可以把所有参数放在JSON请求体中提交。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 02:42:00