Postman发送XML必须区分form-data与raw:前者将XML作为字段值走multipart解析,后者直接发XML体走标准body解析;选错导致400或415错误。

Postman里发XML到接口,form-data和raw根本不是一回事
别被界面迷惑:Postman 的 form-data 会把整个 XML 当作一个字段的值(比如 file 或 xml),而 raw 是直接把 XML 当请求体发送。服务端接收逻辑完全不同——前者走 multipart 解析,后者走标准 body 解析。选错就 400 或 415。
用 form-data 上传 XML 文件时,字段名必须和服务端约定一致
常见错误是随便填 key 名,比如写成 file,但后端实际期待的是 requestXml 或 data。还要注意是否要求文件名带扩展名(如 payload.xml),否则某些框架(如 Spring)可能无法正确识别 Content-Type。
- 在
form-data表单中,Key列填服务端明确要求的字段名(例如xml_file) -
Value列点右侧下拉箭头 → 选File→ 选择本地.xml文件 - 确保该字段的
Content-Type显示为application/xml(Postman 通常自动设置,但可手动点右侧“edit”修改) - 不要额外加
Content-Type请求头——multipart 会自动生成边界和子部分类型
用 raw 发送 XML,必须手动设 Content-Type 且不能带 BOM
如果接口文档写的是 POST /api/v1/submit + Content-Type: application/xml,那就该走 raw。这时候 Postman 不会帮你包装 multipart,只原样发 body,所以漏设头或 XML 文件带 BOM 都会导致解析失败。
- 切换到
Body→raw→ 右侧下拉选XML (application/xml) - 手动在
Headers标签页添加:Content-Type=application/xml; charset=utf-8 - 粘贴的 XML 必须是纯 UTF-8 无 BOM 格式;用 VS Code 打开后右下角看编码,点它 → “Save with Encoding” → 选
UTF-8 - XML 第一行如果是
,encoding 值要和实际字节一致,不一致反而容易出问题,建议删掉这行让服务端按 header 推断
12345 - Widget
调试时怎么确认 Postman 真的发了什么
光看响应码没用。XML 接口出问题,90% 是请求体结构或编码对不上。得看真实发出的原始请求。
- 点击右上角
Code按钮 → 选curl (bash)→ 复制命令到终端执行,观察是否复现问题(排除 Postman UI 干扰) - 在
Console(View → Show Postman Console)里看完整请求头和 body hex dump,特别留意Content-Length和实际 body 字节数是否匹配 - 如果服务端返回
415 Unsupported Media Type,优先检查Content-Type是否拼错、空格多一个、分号缺了 - 如果返回
400 Bad Request且提示“invalid XML”,大概率是 body 被 Postman 自动转义了(比如用了form-data却把 XML 粘在文本字段里)
multipart/form-data 还是 application/xml。看接口文档里的 curl 示例最准,没有就抓包看生产环境真实请求。










