在Java项目里,把包含多层嵌套、集合与泛型的复杂对象输出成XML,往往是接口对接或配置文件生成的常见需求。XStream通过反射机制直接读取字段,几乎零侵入,非常适合快速序列化任务。

引入XStream依赖
以Maven为例,在pom.xml中加入以下依赖即可使用核心功能:
<dependency>
<groupId>com.thoughtworks.xstream</groupId>
<artifactId>xstream</artifactId>
<version>1.4.20</version>
</dependency>
定义复杂的Java对象模型
下面给出一个包含内部对象与列表的示例类,无需任何注解:
public class Department {
private String name;
private List<Employee> employees = new ArrayList<>();
// 省略getter和setter
}
public class Employee {
private String id;
private String title;
// 省略getter和setter
}
使用XStream完成序列化
创建XStream实例并调用toXML方法,就能把对象转为XML字符串:
import com.thoughtworks.xstream.XStream;
public class Demo {
public static void main(String[] args) {
Department dept = new Department();
dept.setName("研发部");
Employee e1 = new Employee();
e1.setId("E01");
e1.setTitle("工程师");
dept.getEmployees().add(e1);
XStream xstream = new XStream();
// 设置类别名,让XML更简洁
xstream.alias("department", Department.class);
xstream.alias("employee", Employee.class);
String xml = xstream.toXML(dept);
System.out.println(xml);
}
}
输出结果说明
上述代码会生成结构清晰的XML,字段名作为节点,集合自动展开为多个子元素。如果希望隐藏某些字段,可使用xstream.omitField()方法。
注意事项
- XStream默认使用XppDriver,生成紧凑XML,也可换用PrettyPrintWriter美化格式。
- 生产环境建议显式设置安全许可,避免反序列化漏洞,例如调用
xstream.allowTypesByRegExp()。 - 对于泛型集合,XStream通常能自动识别,但复杂继承结构可配合转换器定制。
通过以上步骤,即便对象关系繁琐,也能用少量代码稳定输出XML,大幅提升开发效率。