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 | 月度报表任务 |
| status | SUCCESS |
| page | 0 |
| size | 1 |
| sort | createTime,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
相关产品推荐
相关产品推荐

