一个XML的序列化工具,可以实现 Java对象序列化成XML,或者将XML反序列为Java对象。
Example
XStream xstream = new XStream();
String xml = xstream.toXML(myObject); // serialize to XML
Object myObject2 = xstream.fromXML(xml); // deserialize from XML
API地址: XStream (XStream Core 1.4.19 API)
核心jar包:xstream-1.4.19.jar
<dependency>
<groupId>com.thoughtworks.xstream</groupId>
<artifactId>xstream</artifactId>
<version>1.4.19</version>
</dependency>
注解 | 说明 | 作用 |
@XStreamAlias | 别名 | 对类、属性等设置别名 |
@XStreamAsAttribute | 转为属性 | 将字段转为属性 |
@XStreamOmitField | 忽略的字段 | 忽略XML中的字段 |
@XstreamImplicit | 隐式集合 | 集合字段 |
@XstreamConverter | 注入转换器 | 对象 |
@XStreamAlias("module") // 别名
public class ModuleVo {
@XStreamAsAttribute // 表示字段的一个属性,加这个注解,属性字段会在标签内而不是另起一个标签
@XStreamAlias("id") // 别名,如果Java内的属性名称定义的和XML里面不一致,可以用别名的方法
private String moduleid;
@XStreamAsAttribute
private String name;
@XStreamAsAttribute
private String order;
@XStreamImplicit(itemFieldName = "item") // 集合,ItemRegVo类似于ModuleVo这种,里面可以定义自己的属性
private List<ItemRegVo> itemRegVoList = new ArrayList<>();
……
}
例子:
<module id="111" name="name1" order="1">
<item id="item1" name=""/>
<item id="item2" name=""/>
<item id="item3" name=""/>
</module>
try {
fileInputStream = new FileInputStream(file);
XStream xStream = new XStream(new DomDriver());
//清除默认配置,然后进行自定义白名单
xStream.addPermission(NoTypePermission.NONE);
//添加白名单基础类
xStream.addPermission(new ExplicitTypePermission(new Class<?>[]{dockerVo.getClass()}));
// 要启用XStream提供的注解功能,需要在执行对象和XML转换之前注册标注了XStream注解的Java对象
xStream.processAnnotations(dockerVo.getClass());
xStream.fromXML(fileInputStream, dockerVo);
fileInputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
参考文档