使用Jackson进行XML序列化和反序列化

2025年3月17日 | 阅读11分钟

在本节中,我们将讨论Jackson的另一个重要概念,即XML数据的序列化和反序列化。通过使用Jackson,我们可以轻松地将Java对象序列化为XML数据,或者将其反序列化回Java对象(POJO)。为了使用XML,我们使用Jackson "2.x"。

首先,我们将在POM.xml文件中添加Jackson "2.x"依赖项

注意:请添加Jackson-dataformat-xml依赖项的最新版本。

让我们详细了解如何使用Jackson处理XML。

XmlMapper 对象

XmlMapper 是 Jackson "2.x" 中最重要的类之一。它用于XML数据的序列化和反序列化。因此,序列化和反序列化XML数据的第一步是以以下方式创建 XmlMapper 类的实例

将 Java 对象序列化为 XML

ObjectMapperXmlMapper 的父类,用于序列化 JSON 数据。 如果我们想对父类进行任何更改,请在父类中添加一些 XML 特定的更改。 让我们了解如何使用它来序列化以下 Java 类

College.java

将 POJO 序列化为 XML 字符串

我们可以通过简单地创建 XmlMapper 类的实例并使用其 writeValueAsString() 方法,轻松地将 POJO 转换为 XML 字符串,方法如下

让我们举个例子来了解如何使用它将 Java 对象序列化为 XML 字符串。

PojoToXMLExample1.java

输出

XML Serialization and Deserialization with Jackson

将 POJO 序列化为 XML 文件

为了将 Java 对象序列化为 XML 文件,我们只需创建 XmlMapper 类的实例并使用其 writeValue() 方法。在 writeValue() 方法中,我们传递两个参数,即 XML 文件的位置和 Java 对象的实例,方法如下

让我们举个例子来了解如何使用它将 Java 对象序列化为 XML 文件。

PojoToXMLExample2.java

输出

XML Serialization and Deserialization with Jackson
XML Serialization and Deserialization with Jackson

将 XML 反序列化为 POJO

就像序列化一样,我们可以使用 XmlMapper 类轻松地将 XML 数据反序列化为 POJO。 让我们了解如何从 XML 字符串或 XML 文件中逐个反序列化数据。

我们使用 XmlMapper 将以下 XML 反序列化为 POJO

从 XML 字符串反序列化数据

为了将 XML 字符串反序列化为 POJO,请按照以下步骤操作

1. 按照以下方式创建 XmlMapper 类的实例

2. 使用 XmlMapper 类的 readValue() 方法并传递 XML 字符串和要反序列化 XML 字符串的类的名称。

让我们举个例子来了解如何使用它将 XML 字符串反序列化为 POJO。

XMLToPojoExample1.java

输出

XML Serialization and Deserialization with Jackson

从 XML 文件反序列化数据

为了将 XML 文件的数据反序列化为 POJO,我们使用以下步骤

1. 按照以下方式创建 XmlMapper 类的实例

2. 从 xml 文件中读取数据作为字符串并将其存储在字符串变量中。

3. 使用 XmlMapper 类的 readValue() 方法并传递 XML 字符串和要反序列化 XML 字符串的类的名称。

让我们举个例子来了解如何使用它将 XML 文件的数据反序列化为 POJO。

XMLToPojoExample2.java

输出

XML Serialization and Deserialization with Jackson

处理大写元素

在本节中,我们将了解如何处理以下情况:我们有带有大写元素的 XML 要反序列化,或者我们需要将 Java 对象序列化为具有一个或多个大写元素的 XML。

让我们通过一个例子逐一了解这两种情况。

从 XML 字符串反序列化数据

我们使用 XmlMapper 将以下 XML 反序列化为 POJO

HandleCapitalizedElement1.java

输出

XML Serialization and Deserialization with Jackson

将 POJO 序列化为 XML 字符串

我们以以下方式将 POJO 序列化为具有一个或多个大写元素的 XML 字符串或 XML 文件

HandleCapitalizedElement2.java

输出

XML Serialization and Deserialization with Jackson

将 List 序列化/反序列化为/从 XML

我们可以使用 XmlMapper 类轻松地将整个 Java bean 序列化为文档。我们将创建一个具有 comName、comEmail、address 和 contacts 等字段的 Company.java 类并将其序列化为 XML。我们使用 @JacksonXmlElementWrapper 注解来序列化列表。

SerializeListToXML.java

输出

XML Serialization and Deserialization with Jackson

XMLMapper 类自动反序列化列表 xml 元素,而无需使用任何额外的注解。 让我们举个例子来了解我们如何使用 XMLMapper 反序列化具有列表元素的 XML 字符串。

DeserializeListFromXML.java

输出

XML Serialization and Deserialization with Jackson