Spring Boot 默认不自动支持 XML,需添加 jackson-dataformat-xml 依赖并配置 consumes/produces 为 application/xml;实体类需符合规范,如无参构造、getter/setter,推荐使用 @JacksonXmlRootElement;常见问题包括字段名大小写敏感、集合包装控制及 406 错误排查。

Spring Boot 默认支持 XML 请求和响应,但需要手动配置依赖和启用相关支持。核心是添加 Jackson 的 XML 支持(jackson-dataformat-xml),并确保控制器方法正确声明 consumes 和 produces 类型为 application/xml。
添加 XML 支持依赖
在 pom.xml 中引入 Jackson XML 数据格式模块:
- Spring Boot 2.3+ 推荐使用
jackson-dataformat-xml - 避免同时引入
spring-boot-starter-web的默认 JSON 依赖冲突(无需额外排除) - Maven 示例:
com.fasterxml.jackson.dataformat
jackson-dataformat-xml
启用 XML 消息转换器
Spring Boot 会自动注册 Jackson2ObjectMapperBuilder 对应的 MappingJackson2XmlHttpMessageConverter,前提是类路径下存在 XmlMapper。你不需要手动配置,但可微调:
- 确保实体类有无参构造函数、标准 getter/setter
- 用
@JacksonXmlRootElement标记根元素(可选,但推荐) - 如需自定义命名规则,可在配置类中注入
XmlMapperBean
编写接收和返回 XML 的接口
Controller 方法需明确指定媒体类型,并使用 @RequestBody / @ResponseBody 或 @RestController:
@PostMapping(value = "/user",
consumes = MediaType.APPLICATION_XML_VALUE,
produces = MediaType.APPLICATION_XML_VALUE)
public User createUser(@RequestBody User user) {
return userService.save(user);
}
-
consumes告诉 Spring 只接受Content-Type: application/xml的请求 -
produces表示响应头设为application/xml,并用 XML 转换器序列化返回值 - 客户端发送 XML 示例:
Alice 30
常见问题与注意点
XML 支持看似简单,但几个细节容易出错:
- 实体字段名默认映射为 XML 元素名,大小写敏感;可用
@JacksonXmlProperty(localName = "user_name")自定义 - 集合字段需配合
@JacksonXmlElementWrapper(useWrapping = false)控制是否包裹外层标签 - 如果返回 406 Not Acceptable,检查请求头
Accept是否为application/xml,或服务端未启用 XML 转换器 - 不建议在同一个接口同时支持 JSON 和 XML(除非显式配置多消息转换器并处理优先级)
基本上就这些。只要依赖到位、注解写对、实体规范,Spring Boot 处理 XML 就很顺滑。










