Postman用查询参数传数组本质是URL编码重复键名或方括号语法,非真正传数组对象;后端能否解析取决于框架是否支持自动合并同名key或识别key[]=val等约定。

Postman 用查询参数传数组,本质是靠 URL 编码重复键名或特殊语法实现,不是真正“传一个数组对象”。后端能否正确解析,取决于框架是否自动合并同名 key 或是否支持如 key[]=1&key[]=2 这类约定。
Query 参数重复键名:最通用、兼容性最强的方式
多数 Web 框架(Express、Gin、Spring Boot 默认配置)会把相同参数名多次出现的情况,自动聚合成数组。比如:
GET /api/users?role=admin&role=editor&role=user
对应 Postman 的 Params 标签页中,添加三行:role → admin,role → editor,role → user。Postman 会自动拼成 ?role=admin&role=editor&role=user。
- ✅ 适用于所有 HTTP 方法(GET/DELETE 最常用)
- ✅ 不依赖 Content-Type,无 header 配置负担
- ❌ 如果后端没做数组合并(比如某些 PHP 原生
$_GET或旧版 Flask),可能只取最后一个值 - ❌ 无法表达嵌套结构(如
[{id:1,name:"a"},{id:2,name:"b"}])
Query 参数带方括号语法:key[]=val 或 key[0]=val
这是部分框架(如 PHP、Laravel、某些 Express 中间件)识别数组的惯用写法。Postman 同样只需在 Params 里填:
tags[]=web&tags[]=api&tags[]=postman
或显式索引:
Postman 12.27.7 Windows x64 官方安装包,适用于 API 设计、调试、测试与协作。该系列包含 Enterprise 云端性能测试静态 IP 出口能力,以及接口规范标签管理改进,适合受限网络测试与规范资源组织场景。
filter[id]=123&filter[name]=test
但注意:
- ✅ Gin 默认能解析
tags[]=a&tags[]=b成[]string - ✅ Spring Boot 需配合
@RequestParam List才生效,不能只写tags String[] tags - ❌ Express 原生
req.query会把它当字符串("a,b"),需用qs库并配置extended: true - ❌ 浏览器地址栏直接粘贴这种 URL 可能被截断或编码异常,调试时建议用 Postman 而非手动改 URL
别误用 Body 选项填 Query 数组
新手常犯的错:在 Body → x-www-form-urlencoded 里填 ids=1&ids=2,然后发 GET 请求——这完全无效。GET 请求的 body 不会被服务器读取,那些参数根本不会到达后端。
- ⚠️
GET请求必须用Params标签页传查询参数,Body标签页对 GET 是摆设 - ⚠️
POST请求若想用 query 传数组(比如带分页过滤的 POST),仍得走Params,不是Body - ✅ 真要传复杂结构(对象数组、深层嵌套),应改用
Body→raw+JSON,并配Content-Type: application/json
Gin 和 Express 接收时的关键差异
同一串 URL ?ids=1&ids=2&ids=3,不同框架默认行为不同:
- Gin:
c.QueryArray("ids")直接返回[]string{"1","2","3"};c.Param不适用(那是 path 参数) - Express(无中间件):
req.query.ids是字符串"3"(只留最后一个);必须用express.urlencoded({ extended: true })才能让req.query.ids变成数组 - Spring Boot:
@RequestParam List能自动装箱,但ids @RequestParam Long[] ids在空值时易抛NumberFormatException - PHP:
$_GET['ids']是数组,前提是 URL 写成ids[]=1&ids[]=2,纯ids=1&ids=2会覆盖
实际填参前,先确认你后端框架对查询参数数组的默认约定,而不是假设所有框架都一样处理重复 key。










