根本原因是JSON数组字段与后端DTO结构不匹配,需确保Content-Type为application/json、字段名大小写一致、变量引用合法且整体封装入DTO。

Postman 中 JSON 数组字段被解析为空或报 415 错误
根本原因几乎总是请求体结构与后端期望的 Java/Kotlin DTO 不匹配。Spring Boot 的 @RequestBody 只能绑定一个完整 JSON 对象,不能把数组和字符串拆成多个参数接收。
常见错误现象:415 Unsupported Media Type、后端日志报 JSON parse error: Cannot deserialize instance、Postman 控制台显示 Unexpected character。
- 检查控制器方法签名:是否写了类似
@RequestBody List这种多参数混用?这是非法的,必须封装进一个 DTOids, @RequestParam String name - 确认 Postman 请求头中
Content-Type是application/json(不是text/plain或空) - 数组字段名必须与 DTO 中的属性名完全一致(包括大小写),例如 DTO 里是
accountIds,就不能在 body 里写成account_ids
Postman 发送 JSON 数组时变量引用导致格式错误
当你用 {{variable_name}} 替换数组元素或整个数组时,若没加引号,JSON 就会变成非法结构 —— 比如把 "ids": [{{userIds}}] 展开为 "ids": [101,102,103] 是合法的,但展开成 "ids": [101,102,abc] 就会因 abc 缺少引号而报错 Unexpected character ('a' (code 97))。
- 字符串类变量(如用户名、token)必须包裹双引号:
"name": "{{userName}}",否则解析器当它是未定义标识符 - 整数/布尔变量可不加引号,但前提是确保变量值确实是数字或
true/false,而非字符串"true" - 数组变量建议整体替换,不要逐个元素插值;例如定义全局变量
userList值为[1,2,3],然后 body 写成{"users": {{userList}}}
用 tv4 在 Postman 测试脚本中校验响应数组结构
后端返回的 JSON 数组字段如果结构松散(比如有时是 [],有时是 [{"id":1}],有时缺失),光靠 data.items.length 判断容易漏掉类型错误。tv4 是 Postman 内置的轻量 Schema 验证器,适合做结构兜底。
- 先在测试脚本顶部引入 tv4:
var tv4 = require('tv4'); - 定义数组结构 Schema,例如要求
results是非空数组,每个元素含id(number)和name(string):var schema = { "type": "object", "properties": { "results": { "type": "array", "minItems": 1, "items": { "type": "object", "properties": { "id": {"type": "number"}, "name": {"type": "string"} }, "required": ["id", "name"] } } }, "required": ["results"] }; - 执行验证:
var data = JSON.parse(responseBody); var result = tv4.validate(data, schema); tests["Response matches schema"] = result.valid;
Postman 中遍历 JSON 数组提取 ID 并存为变量的边界陷阱
很多人写 for (var i = 0; i 导致 Cannot read property 'id' of undefined —— 数组索引最大是 length - 1, 会越界一次。
- 循环必须用
i ,不是 - 务必先检查
data和data.users是否存在且为数组:Array.isArray(data?.users) - 比较布尔值时别写
user.isRetail == true,直接用user.isRetail,避免null或字符串"true"导致逻辑错乱 - 存全局变量用
pm.globals.set("userId", user.id),别用已废弃的postman.setGlobalVariable
实际接口联调中,最耗时间的往往不是写功能,而是反复核对「数组字段名拼写」「变量是否加引号」「循环索引是否越界」这三类低级但隐蔽的问题。











