在Spring Boot中配置JacksonXmlModule需引入jackson-dataformat-xml依赖,通过@Bean定义Jackson2ObjectMapperBuilder并注入JacksonXmlModule;需在Controller中指定produces = MediaType.APPLICATION_XML_VALUE,并可结合@JacksonXmlElementWrapper控制集合XML包装。

在Spring Boot中配置JacksonXmlModule,核心是替换默认的Jackson2ObjectMapperBuilder,让XML序列化/反序列化支持自定义模块(如JacksonXmlModule),并确保Spring MVC的MappingJackson2XmlHttpMessageConverter使用它。
启用Jackson XML支持并添加JacksonXmlModule
Spring Boot默认不自动配置XML消息转换器,需显式引入依赖并注册JacksonXmlModule。先确保项目包含:
com.fasterxml.jackson.dataformat jackson-dataformat-xml
然后通过@Bean定义Jackson2ObjectMapperBuilder,注入JacksonXmlModule:
@Bean
public Jackson2ObjectMapperBuilder jackson2ObjectMapperBuilder() {
return new Jackson2ObjectMapperBuilder()
.modules(new JacksonXmlModule());
}
该配置会自动被MappingJackson2XmlHttpMessageConverter复用,无需额外注册转换器(只要XML依赖存在,Spring Boot会自动启用XML HTTP消息转换)。
自定义JacksonXmlModule行为(如忽略命名空间、设置默认类型)
JacksonXmlModule本身可配置基础XML特性。例如关闭命名空间支持、指定默认实现类:
@Bean
public Jackson2ObjectMapperBuilder jackson2ObjectMapperBuilder() {
JacksonXmlModule xmlModule = new JacksonXmlModule();
xmlModule.setDefaultUseWrapper(false); // 禁用根元素包装(如- ...
)
xmlModule.setXMLNamespacesEnabled(false);
return new Jackson2ObjectMapperBuilder()
.modules(xmlModule)
.featuresToDisable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
}
注意:setXMLNamespacesEnabled等方法影响XML输出结构,需根据客户端兼容性调整。
确保Controller响应XML内容类型
即使配置了XML模块,控制器仍需明确声明produces = MediaType.APPLICATION_XML_VALUE,否则Spring MVC不会触发XML转换器:
@GetMapping(value = "/user", produces = MediaType.APPLICATION_XML_VALUE)
public User getUser() {
return new User("Alice", 30);
}
同时确保请求头包含Accept: application/xml,或通过curl -H "Accept: application/xml" http://localhost:8080/user测试。
处理List集合的XML包装问题
默认情况下,Jackson XML对List会生成带包装根元素(如)。若需扁平化输出(),不能仅靠JacksonXmlModule,需配合@JacksonXmlElementWrapper(useWrapping = false)注解:
public class Response {
@JacksonXmlElementWrapper(useWrapping = false)
@JacksonXmlProperty(localName = "user")
private List users;
}
该注解作用于字段,告诉Jackson跳过集合外层包装标签。










