相对于JAXB,XStream更简洁一些。
常用注解:
@XStreamAlias:定义xml节点名
1.引入XStream依赖
<dependency>
<groupId>com.thoughtworks.xstream</groupId>
<artifactId>xstream</artifactId>
<version>1.4.19</version>
</dependency>
2.工具类
import com.thoughtworks.xstream.XStream;
/**
* XStream 实现bean与xml之间相互转换
*/
public class XStreamXmlBeanUtil {
/**
* JavaBean转XML
* @param bean - JavaBean
* @return - XML
*/
public static String toXml(Object bean) {
return initXStream(bean.getClass()).toXML(bean);
}
/**
* XML转JavaBean
* @param xml - XML
* @param beanClazz - JavaBean Class
* @param <T>
* @return - JavaBean
*/
@SuppressWarnings("unchecked")
public static <T> T fromXml(String xml, Class<T> beanClazz) {
return (T) initXStream(beanClazz).fromXML(xml);
}
private static XStream initXStream(Class<?> beanClazz) {
XStream x = new XStream();
//不使用默认的类加载器,需要手动设置类加载器
x.setClassLoader(beanClazz.getClassLoader());
x.processAnnotations(beanClazz);
x.allowTypesByRegExp(new String[]{".*"});
// 开起注解功能
x.autodetectAnnotations(true);
// 忽律未知字段
x.ignoreUnknownElements();
return x;
}
}
3.使用
import com.thoughtworks.xstream.annotations.XStreamAlias;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
public class Test {
public static void main(String[] args) {
System.out.println("============普通bean===============");
User user = new User("貂蝉", 18, "女");
String xml = XStreamXmlBeanUtil.toXml(user);
System.out.println(xml);
System.out.println(XStreamXmlBeanUtil.fromXml(xml, User.class));
System.out.println("============继承bean===============");
User child = new Child("吃糖葫芦");
child.setName("葫芦娃");
child.setAge(2);
child.setGender("男");
System.out.println(child);
xml = XStreamXmlBeanUtil.toXml(child);
System.out.println(xml);
user = XStreamXmlBeanUtil.fromXml(xml, Child.class);
System.out.println(user);
}
}
@Data
@NoArgsConstructor
@AllArgsConstructor
@XStreamAlias("Women")
class User {
private String name;
private int age;
private String gender;
}
@NoArgsConstructor
@AllArgsConstructor
@Data
@XStreamAlias("User")
class Child extends User {
private String hobby;
}