Postman中写null值需在raw→JSON模式下直接写"field": null(全小写、不加引号),后端能否正确接收取决于框架解析逻辑:Go需用指针字段并检查解码错误,Spring Boot需用包装类并避免校验拦截。

Postman 本身不阻止你往 JSON 请求体里写 null,但后端能否正确接收、反序列化并保留这个 null,取决于你用的框架、语言和字段定义方式。直接写 null 是合法 JSON,但常见踩坑点不在 Postman 端,而在服务端解析逻辑或结构体字段标签上。
Postman 中怎么写 null 值
在 Body → raw → JSON 模式下,直接把某个字段值写成 null 即可,不需要引号,也不用加斜杠转义:
{
"username": "alice",
"middle_name": null,
"age": 28
}
注意:null 必须是全小写,Null、NULL 或 "null"(带引号)都不是合法 JSON null 类型,后者会被当成字符串。
- 确保 Body 下拉菜单确实选的是
JSON,不是Text或其他格式,否则Content-Type不会自动设为application/json - 不要在
null后面加逗号,比如"middle_name": null,在最后一个字段时会导致语法错误 - 如果字段名本身需要传
null(极少见),JSON 不支持键为null,这是语法非法的,Postman 会提示解析失败
Go 后端解析 null 字段常失败的原因
Go 的 json.Unmarshal 默认会把缺失字段或 null 值映射为结构体字段的零值(如 ""、0、false),而不是保留 null 语义。如果你需要区分“没传”、“传了 null”、“传了空字符串”,必须用指针或自定义类型:
Postman 12.27.7 Windows x64 官方安装包,适用于 API 设计、调试、测试与协作。该系列包含 Enterprise 云端性能测试静态 IP 出口能力,以及接口规范标签管理改进,适合受限网络测试与规范资源组织场景。
- 用指针字段:例如
LastName *string,当 JSON 是"last_name": null时,解码后LastName为nil;如果是"last_name": "",则为指向空字符串的指针 - 避免忽略解码错误:即使写了
null,若结构体字段没加json:标签或大小写不匹配(如 JSON 字段user_id对应 Go 字段UserID但没写json:"user_id"),字段根本不会被赋值,看起来也像null - 别重复读
req.Body:调试时若先io.ReadAll打印原始 body,再调json.Decode,第二次读会返回空 —— 这不是null问题,是流已耗尽
Spring Boot 接收 null 的典型配置
Spring 默认用 Jackson,对 null 支持较好,但仍有两个关键点:
-
@RequestBody参数对应的 DTO 字段不能是基本类型(如int、boolean),必须用包装类(Integer、Boolean),否则null会触发HttpMessageNotReadableException - 如果 DTO 字段加了
@NotNull或@NotBlank等校验注解,null会直接被拦截并返回 400,需改用@Nullable或移除校验 - 全局配置
spring.jackson.deserialization.fail-on-null-for-primitives=false可避免基本类型字段因null崩溃,但不推荐,掩盖设计问题
前端 JS 序列化时 null 被丢弃怎么办
如果你是从前端代码生成 JSON 再粘贴进 Postman,注意 JSON.stringify({ name: undefined }) 会直接忽略该字段,而 JSON.stringify({ name: null }) 才输出 "name": null。Postman 里手写没问题,但自动化构造时容易混淆:
-
undefined→ 字段消失 -
null→ 字段保留,值为null -
""(空字符串)→ 字段保留,值为空字符串
真正难处理的不是 Postman 怎么输 null,而是服务端是否定义了能承载 null 语义的数据结构,以及你有没有在日志或断点里确认它真的进了 controller —— 很多时候你以为传了 null,其实卡在了反序列化前的中间件或网关过滤规则里。

















