XStream 是一个用于将 Java 对象与 XML 之间进行转换的库。它非常简单易用,适用于快速开发和原型设计。下面将详细介绍如何使用 XStream 实现 JavaBean 与 XML 之间的互转,并提供具体的代码示例。
1. 引入依赖
首先,确保在项目中引入了 XStream 的依赖。如果使用的是 Maven 构建工具,可以在项目的 pom.xml 文件中添加如下依赖:
<dependency>
<groupId>com.thoughtworks.xstream</groupId>
<artifactId>xstream</artifactId>
<version>1.4.19</version> <!-- 检查是否有更新版本 -->
</dependency>
2. 定义 JavaBean
假设有一个简单的 Person 类,包含姓名、年龄和地址信息:
public class Person {
private String name;
private int age;
private Address address;
// Getters and Setters
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
", address=" + address +
'}';
}
public static class Address {
private String street;
private String city;
private String state;
// Getters and Setters
@Override
public String toString() {
return "Address{" +
"street='" + street + '\'' +
", city='" + city + '\'' +
", state='" + state + '\'' +
'}';
}
}
}
3. JavaBean 转 XML
使用 XStream 将 Person 对象转换为 XML 字符串:
import com.thoughtworks.xstream.XStream;
public class JavaBeanToXmlExample {
public static void main(String[] args) {
// 创建 Person 对象
Person.Address address = new Person.Address();
address.setStreet("123 Main St");
address.setCity("Anytown");
address.setState("Anystate");
Person person = new Person();
person.setName("John Doe");
person.setAge(30);
person.setAddress(address);
// 创建 XStream 实例
XStream xstream = new XStream();
// 将 JavaBean 转换为 XML
String xml = xstream.toXML(person);
// 输出 XML
System.out.println(xml);
}
}
4. XML 转 JavaBean
使用 XStream 将 XML 字符串转换为 Person 对象:
import com.thoughtworks.xstream.XStream;
public class XmlToJavaBeanExample {
public static void main(String[] args) {
// XML 字符串
String xml = "<person>\n" +
" <name>John Doe</name>\n" +
" <age>30</age>\n" +
" <address>\n" +
" <street>123 Main St</street>\n" +
" <city>Anytown</city>\n" +
" <state>Anystate</state>\n" +
" </address>\n" +
"</person>";
// 创建 XStream 实例
XStream xstream = new XStream();
// 将 XML 转换为 JavaBean
Person person = (Person) xstream.fromXML(xml);
// 输出 JavaBean
System.out.println(person);
}
}
5. 自定义标签名称
默认情况下,XStream 会使用类名和字段名作为 XML 标签名称。如果想自定义标签名称,可以使用注解或配置方法。
使用注解
import com.thoughtworks.xstream.annotations.XStreamAlias;
@XStreamAlias("person")
public class Person {
@XStreamAlias("full-name")
private String name;
@XStreamAlias("age-in-years")
private int age;
@XStreamAlias("address-info")
private Address address;
// Getters and Setters
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
", address=" + address +
'}';
}
@XStreamAlias("address")
public static class Address {
@XStreamAlias("street-address")
private String street;
@XStreamAlias("city-name")
private String city;
@XStreamAlias("state-code")
private String state;
// Getters and Setters
@Override
public String toString() {
return "Address{" +
"street='" + street + '\'' +
", city='" + city + '\'' +
", state='" + state + '\'' +
'}';
}
}
}
使用配置方法
import com.thoughtworks.xstream.XStream;
public class CustomTagExample {
public static void main(String[] args) {
// 创建 Person 对象
Person.Address address = new Person.Address();
address.setStreet("123 Main St");
address.setCity("Anytown");
address.setState("Anystate");
Person person = new Person();
person.setName("John Doe");
person.setAge(30);
person.setAddress(address);
// 创建 XStream 实例
XStream xstream = new XStream();
// 配置自定义标签名称
xstream.alias("person", Person.class);
xstream.alias("address", Person.Address.class);
xstream.aliasField("full-name", Person.class, "name");
xstream.aliasField("age-in-years", Person.class, "age");
xstream.aliasField("address-info", Person.class, "address");
xstream.aliasField("street-address", Person.Address.class, "street");
xstream.aliasField("city-name", Person.Address.class, "city");
xstream.aliasField("state-code", Person.Address.class, "state");
// 将 JavaBean 转换为 XML
String xml = xstream.toXML(person);
// 输出 XML
System.out.println(xml);
}
}
总结
- JavaBean 转 XML:使用
XStream的toXML方法将 Java 对象转换为 XML 字符串。 - XML 转 JavaBean:使用
XStream的fromXML方法将 XML 字符串转换为 Java 对象。 - 自定义标签名称:可以使用注解或配置方法来自定义 XML 标签名称。

2296

被折叠的 条评论
为什么被折叠?



