必须显式设置 Content-Type: text/plain,否则 Postman 可能不发该头或发 text/plain;charset=UTF-8,导致后端因严格匹配失败返回 415 错误。

Postman 发送纯文本(text/plain)请求时,必须显式设置 Content-Type: text/plain,否则默认可能发成 text/plain;charset=UTF-8 或被自动覆盖为 application/json,导致后端返回 415 Unsupported Media Type。
为什么 POST 纯文本会报 415 错误
多数后端框架(如 Spring Boot、Express、Django)对 Content-Type 做严格校验。若你只在 Body → raw 输入一段字符串(比如 hello world),但没在 Headers 显式设 Content-Type,Postman 可能不带该头,或带一个不匹配的值(如 text/plain;charset=UTF-8)。而接口只认精确的 text/plain —— 少个 ;charset 都可能被拒。
常见错误现象:
- 响应状态码
415 Unsupported Media Type - 响应体提示类似
Content type 'text/plain;charset=UTF-8' not supported - 后端日志显示未匹配到
@PostMapping(consumes = "text/plain")的处理器
手动设置 Content-Type: text/plain 的两种方式
推荐优先用「手动添加」,避免 Postman 自动注入干扰:
Postman 12.27.7 Windows x64 官方安装包,适用于 API 设计、调试、测试与协作。该系列包含 Enterprise 云端性能测试静态 IP 出口能力,以及接口规范标签管理改进,适合受限网络测试与规范资源组织场景。
- 切换到
Headers标签页 - 在
Key栏输入Content-Type,Value栏**严格输入**text/plain(不加空格、不加分号、不写charset) - 确保
Headers表格里没有其他Content-Type行(Postman 允许多行同 key,但后端通常只读第一个) - 切到
Body → raw,选择下拉菜单为Text(不是JSON,也不是XML),然后输入纯文本内容,例如:id=123&name=test或{"raw":"string"}
⚠️ 注意:不要依赖 raw 下拉菜单选 Text 后 Postman 自动补 Content-Type —— 它有时补的是 text/plain;charset=UTF-8,不满足强匹配要求。
发送纯文本时 Body 模式与 Content-Type 的对应关系
Body 标签页的下拉选项只是快捷提示,**真正起效的是 Headers 中的 Content-Type 值**。Postman 不会因你选了 Text 就强制覆盖你手写的头。
- 选
Text+ 手动设Content-Type: text/plain→ 安全可靠 - 选
Text+ 不设头 → 可能无头或带text/plain;charset=UTF-8→ 风险高 - 选
JSON+ 设Content-Type: text/plain→ 内容仍按纯文本发,但 Postman 会对 JSON 做语法高亮和校验(无害,但易误导) - 选
application/x-www-form-urlencoded→ 会自动设Content-Type: application/x-www-form-urlencoded,且把键值对 URL 编码 —— 这不是纯文本,别混用
调试纯文本请求容易忽略的点
纯文本看似简单,但实际出问题常卡在细节:
-
Content-Type大小写敏感?否,HTTP 头名不区分大小写,但值区分:TEXT/PLAIN是非法 MIME 类型,必须小写text/plain - 换行符是否影响?是。某些后端(如 Nginx + FastAPI)对末尾
\n或 BOM 字节敏感,建议 Body 里避免 UTF-8 BOM,粘贴时用纯 ASCII 编辑器检查 - 要不要加
charset?除非接口文档明确要求(如text/plain;charset=GBK),否则一律省略 —— 多数 REST 接口约定纯文本即 UTF-8,不声明 charset 反而更兼容 - 预请求脚本(Pre-request Script)里动态设头时,记得用
pm.request.headers.upsert()而非add(),避免重复添加
最稳妥的做法:每次发纯文本前,点开 Headers 标签页,确认只有一行 Content-Type: text/plain,且 Body → raw 模式为 Text,内容无隐藏字符。
















