在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跳过集合外层包装标签。