因为URL规范(RFC 1738)规定+号作为空格的编码形式,Postman的params参数拼接在URL中,后端按标准将+自动解码为空格;改用Body中的x-www-form-urlencoded或form-data可避免该问题。

Postman 的 params 里填 + 号,为什么到后端变空格?
因为 params 模块的参数会拼接到 URL 查询字符串(query string)末尾,而 HTTP 规范中,URL 里的 + 是空格的合法编码形式(不是转义错误,是标准行为)。服务端(如 Tomcat、Spring Boot 默认解析器)收到后,会按规范把 + 自动解码为空格。
常见错误现象:username=john+doe → 后端收成 john doe;token=abc+def+xyz → 解密失败(AES 密文含 + 被吃掉)。
- 这不是 Postman 的 bug,是 RFC 1738 和 W3C 表单规范共同决定的
- 只要参数走 URL(即
GET或POST的params),就一定会触发这个解码逻辑 - 前端用
encodeURIComponent('john+doe')得到的是john%2Bdoe,但 Postman 的params输入框不自动做这层编码
改用 x-www-form-urlencoded 能避免 + 变空格吗?
能,但要注意前提:必须把参数从 params 移到 Body → x-www-form-urlencoded,同时确保请求头 Content-Type 是 application/x-www-form-urlencoded(Postman 默认会设好)。
此时参数不再拼 URL,而是以键值对形式放在请求体中,+ 不再被视为空格,而是原样传输(除非你手动对 value 做了 encodeURI)。
Postman 12.27.7 Windows x64 官方安装包,适用于 API 设计、调试、测试与协作。该系列包含 Enterprise 云端性能测试静态 IP 出口能力,以及接口规范标签管理改进,适合受限网络测试与规范资源组织场景。
- Postman 会自动对每个 value 执行 URL 编码(空格→
%20,+→%2B,&→%26) - 后端框架(如 Spring 的
@RequestParam)仍能正确 decode,且不会把%2B当空格处理 - ⚠️ 注意:如果后端用的是原始 Servlet API(如
request.getParameter()),它默认仍按 query string 规则解析 body —— 这时需显式用request.getReader()或getInputStream()手动读取原始 body
form-data 和 raw JSON 哪个更适合传含 + 的敏感数据?
优先选 form-data;raw → JSON 仅在后端明确要求 Content-Type: application/json 时才用。
form-data 完全绕过 URL 编码链路,每个字段都是独立 part,+、&、换行、二进制内容全都能原样保留。JSON 虽然语义清晰,但若后端没配好 Jackson 的反序列化配置(比如没禁用 ALLOW_UNQUOTED_CONTROL_CHARS),遇到未转义的 + 可能直接报 400。
-
form-data:适合含特殊字符、混合文本/文件、或需要 100% 控制原始字节的场景 -
raw → JSON:适合纯结构化数据,但 value 中的+必须由前端手动JSON.stringify()保证合法(它本身不会把+变空格) - 别用
raw → Text:它不带任何编码,后端很可能收不到完整字段(尤其含&或换行时)
后端接收时怎么确认 + 号没被破坏?
最可靠的方式是跳过框架封装,直接读原始请求体(HttpServletRequest.getInputStream() 或 getRawBody()),然后 hex dump 或 base64 编码输出前几个字节,比对是否含 2b(即 + 的 ASCII 十六进制)。
例如:传 code=a+b+c,原始 body 应为 code=a%2Bb%2Bc(x-www-form-urlencoded)或 ------boundary\r\n...a+b+c\r\n(form-data),而不是 code=a b c。
- Spring Boot 推荐加一个
@RequestBody String raw参数临时调试,避免@RequestParam自动解码干扰 - Tomcat 8+ 可通过
URIEncoding="UTF-8"配置防止乱码,但它不改变+→ 空格规则 - 真正难排查的点在于:前端以为自己编码了,Postman 显示已编码,但后端日志里打印出的却是解码后结果——所以不要依赖日志字符串,要看原始流

















