Content-Type 应设为 application/xml;必须与 XML 声明中的 encoding 一致(推荐 UTF-8),且 Spring Boot 需额外添加 JAXB 依赖并配置 HttpMessageConverter,否则易触发 415 错误。

Content-Type 应该设为 application/xml
发送 XML 作为请求体时,Content-Type 必须明确告知服务端载荷是 XML 格式。标准且最通用的取值是 application/xml。
虽然 text/xml 在历史上也被支持,但现代 API 设计和主流框架(如 Spring Boot、ASP.NET Core、Express + body-parser)默认只识别 application/xml;用 text/xml 可能导致解析失败或 415 Unsupported Media Type 错误。
-
application/xml:RFC 7303 推荐,语义上表示“不可直接渲染的结构化数据”,适用于 API 场景 -
text/xml:旧规范遗留,部分老系统可能仍接受,但不推荐新项目使用 - 带字符集声明时写成
application/xml; charset=utf-8,注意charset=后必须与 XML 声明中一致(如)
常见错误:XML 声明编码与 Content-Type 不匹配
即使设置了 application/xml; charset=utf-8,如果 XML 正文开头写了 ,多数解析器会优先按 XML 声明解码,导致乱码或解析中断。
- 统一用 UTF-8:XML 声明里写
encoding="UTF-8",Content-Type也写charset=utf-8 - 不要省略 XML 声明——某些解析器(如 Java 的
DocumentBuilder)在无声明时可能默认用系统编码,行为不可控 - 若后端是 Spring MVC,还需确认
@RequestBody方法参数有对应HttpMessageConverter(如Jaxb2RootElementHttpMessageConverter),否则 415 仍会出现
cURL 和 Axios 中的实际设置示例
命令行或前端发请求时,不能只靠数据格式自动推断类型,必须显式设置头。
curl -X POST https://api.example.com/data \ -H "Content-Type: application/xml; charset=utf-8" \ -d '' Alice
axios.post('/data', 'Alice ', {
headers: {
'Content-Type': 'application/xml; charset=utf-8'
}
})
Spring Boot 默认不支持 XML?得手动配
Spring Boot 2.3+ 默认移除了 JAXB 依赖,即使 Content-Type 设置正确,也会因缺少转换器返回 415。
- 加依赖:
org.springframework.boot:spring-boot-starter-web+javax.xml.bind:jaxb-api(Java 8)或org.glassfish.jaxb:jaxb-runtime(Java 11+) - 确保启动类或配置类上有
@EnableWebMvc或启用默认 MVC 配置(通常已有) - 检查日志是否出现
No HttpMessageConverter for class XXX—— 这是典型缺失转换器信号










