Jackson-dataformat-xml 是 Jackson 官方提供的 XML 数据处理扩展模块,用于实现 Java 对象与 XML 的序列化/反序列化,需配合 jackson-databind 使用,不支持 JSON 与 XML 字符串直接互转。

Jackson-dataformat-xml 是什么
它是一个 Jackson 官方提供的扩展模块,用于在 Java 中读写 XML 数据,和 jackson-databind 配合使用,让 ObjectMapper 支持 XML 序列化/反序列化。它不处理 JSON —— JSON 是 jackson-databind 本体的能力;XML 支持是靠这个插件“加装”的。
关键点:它不是独立的 JSON↔XML 转换器,不能直接把一段 JSON 字符串转成 XML 字符串(反之亦然)。它做的是「Java 对象 ↔ XML」和「Java 对象 ↔ JSON」,中间必须经过对象这一层。
如何用它实现 Java 对象 ↔ XML
先确保 Maven 引入正确依赖:
com.fasterxml.jackson.dataformat jackson-dataformat-xml 2.15.2
然后创建 XmlMapper(它是 ObjectMapper 的子类,专为 XML 优化):
立即学习“Java免费学习笔记(深入)”;
- 不要用
new ObjectMapper()处理 XML,它默认不支持 XML 注解和格式 - 要用
new XmlMapper()或new XmlMapper(new JacksonXmlModule()) - 常见遗漏:没配置
XmlMapper的setDefaultUseWrapper(false),导致生成多余外层包装标签 - 若需兼容 JDK 17+ 的模块系统,记得添加
--add-opens java.base/java.lang=ALL-UNNAMED
示例:将对象转为 XML 字符串
XmlMapper xmlMapper = new XmlMapper();
xmlMapper.setDefaultUseWrapper(false);
String xml = xmlMapper.writeValueAsString(new User("alice", 30));
为什么不能直接 JSON 字符串 ↔ XML 字符串
因为 jackson-dataformat-xml 没提供跨格式直转的 API。你看到的所谓“JSON to XML”工具,底层都是:
- 用
ObjectMapper把 JSON 解析成JsonNode或具体 POJO - 再用
XmlMapper把同一个JsonNode或 POJO 写成 XML
注意风险点:
-
JsonNode转 XML 时,数组可能变成多个同名标签,但无序或嵌套结构可能丢失(XML 无原生数组概念) - JSON 的
null值在 XML 中无法直接表达,通常被忽略或映射为空标签,取决于XmlMapper配置 - 字段名大小写、下划线/驼峰转换需统一配置,否则两边字段对不上,反序列化失败
容易踩的坑:注解和命名不一致
XML 和 JSON 对字段映射的默认行为不同:
-
@JsonProperty("user_name")只影响 JSON;XML 默认用字段名或 getter 名,除非加@JacksonXmlProperty(localName = "user-name") -
@JacksonXmlRootElement(localName = "person")控制根元素名,JSON 不认这个注解 - 集合字段默认会被包装一层(如
),关掉要用- ...
@JacksonXmlWrapped(useWrapping = false) - 没有
@XmlAccessorType(XmlAccessType.FIELD)等 JAXB 注解的支持 ——jackson-dataformat-xml不解析 JAXB 注解,只认自己的@JacksonXml*系列
实际开发中,如果已有 JSON 接口定义,想复用同一套 POJO 输出 XML,必须补全 @JacksonXml* 注解,不能只靠 @JsonProperty。









