必须用 raw + JSON 模式传嵌套对象数组,因 form-data 和 x-www-form-urlencoded 无法解析层级结构;Postman 中需选 raw/JSON、设 Content-Type: application/json,并用 DTO 封装接收。

Postman 里往数组里传嵌套对象,核心就一条:必须用 raw + JSON 模式,不能用 form-data 或 x-www-form-urlencoded。
为什么 form-data 传不了嵌套对象数组?
因为 form-data 本质是键值对拼接,不支持层级结构。你写 items[0][name] 或 items[][user][address][city] 这类语法,后端(尤其是 Spring Boot、Flask)默认不会递归解析成嵌套对象数组——它只会当字符串收,或者直接报错 400 Bad Request 或 415 Unsupported Media Type。
-
form-data适合传文件 + 简单字段(如file,title) -
x-www-form-urlencoded只能扁平化传参,user.name=Alice&user.city=Beijing解析出来是两层独立字段,不是{"user": {"name": "Alice", "city": "Beijing"}} - 只有
raw+application/json能保留 JSON 的完整嵌套结构和数组语义
Postman 中正确发送嵌套对象数组的步骤
以发送一个含 2 个用户信息的数组为例(每个用户含 name、profile 对象、tags 字符串数组):
Postman 12.27.7 Windows x64 官方安装包,适用于 API 设计、调试、测试与协作。该系列包含 Enterprise 云端性能测试静态 IP 出口能力,以及接口规范标签管理改进,适合受限网络测试与规范资源组织场景。
- 在 Postman 的 Body 选项卡中,选
raw,右侧下拉菜单选JSON - 粘贴如下结构(注意缩进不重要,但括号必须配对):
{<br> "users": [<br> {<br> "name": "Tom",<br> "profile": {<br> "age": 28,<br> "country": "CN"<br> },<br> "tags": ["dev", "python"]<br> },<br> {<br> "name": "Lily",<br> "profile": {<br> "age": 32,<br> "country": "US"<br> },<br> "tags": ["qa", "api"]<br> }<br> ]<br>} - 切到 Headers 选项卡,确保有:
Content-Type: application/json - 发送请求,后端用
request.get_json()(Flask)或@RequestBody UserListRequest(Spring Boot)接收即可
Spring Boot 后端怎么接这个数组?别漏 DTO 和注解
不能写成 @RequestBody List<user> users</user> —— Spring 不允许 @RequestBody 直接绑定到集合类型参数(会报 HTTP message not readable)。必须封装一层 DTO:
- 定义 DTO 类(必须有无参构造器 + getter/setter):
public class UserListRequest {<br> private List<User> users;<br> // getter/setter<br>} - Controller 方法签名写成:
@PostMapping("/batch")<br>public ResponseEntity<?> handle(@RequestBody UserListRequest request) { ... } - 如果用 Lombok,加
@Data和@NoArgsConstructor就够了;没 Lombok 则手动补全无参构造器 - 忽略字段用
@JsonIgnore,可选字段用@JsonProperty(required = false)
容易被忽略的三个细节
很多人调通一次就以为没问题,但上线后出错往往卡在这三处:
- Postman 的
Content-Type头漏了或拼错了,比如写成application/json;charset=UTF-8(部分老版本 Spring Boot 会拒收),最稳写法是纯application/json - 前端 JS 用
JSON.stringify()发送时,后端 DTO 字段名跟 JSON key 不一致(比如 JSON 是user_name,DTO 是userName),没加@JsonProperty("user_name")注解就会为 null - 数组里某个对象缺了必填字段,而 DTO 中对应属性没设
@Nullable或没配全局 Jackson 配置DeserializationFeature.FAIL_ON_MISSING_CREATOR_PROPERTIES = false,整个请求直接 400
















