XStream实现Bean与xml互转的代码示例
程序员文章站
2022-03-10 16:38:43
...
一、导入jar包
<dependency> <groupId>com.thoughtworks.xstream</groupId> <artifactId>xstream</artifactId> <version>1.4.8</version> </dependency>
二、重要注解说明
@XStreamAlias 定义别名
@XStreamAsAttribute 定义为属性
@XStreamOmitField 忽略
@XStreamConverter 处理日期格式
@XStreamImplicit(itemFieldName = "roles") 处理List
三、实例
1、定义JavaBean
import java.util.Date; import java.util.List; import com.thoughtworks.xstream.annotations.XStreamAlias; import com.thoughtworks.xstream.annotations.XStreamAsAttribute; import com.thoughtworks.xstream.annotations.XStreamConverter; import com.thoughtworks.xstream.annotations.XStreamImplicit; import com.thoughtworks.xstream.annotations.XStreamOmitField; import com.tzz.util.xml.DateConverter; @XStreamAlias("user") public class User { @XStreamAsAttribute private Integer id; private String name; @XStreamOmitField private int age; private String sex; @XStreamConverter(value = DateConverter.class) private Date birthday = new Date(); @XStreamImplicit(itemFieldName = "roles") private List<Role> roles; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public List<Role> getRoles() { return roles; } public void setRoles(List<Role> roles) { this.roles = roles; } public Date getBirthday() { return birthday; } public void setBirthday(Date birthday) { this.birthday = birthday; } }
import com.thoughtworks.xstream.annotations.XStreamAlias; @XStreamAlias("role") public class Role { private Integer id; private String name; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
2、转换工具类
import java.io.Writer; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Set; import org.dom4j.Element; import com.thoughtworks.xstream.XStream; import com.thoughtworks.xstream.core.util.QuickWriter; import com.thoughtworks.xstream.io.HierarchicalStreamWriter; import com.thoughtworks.xstream.io.xml.PrettyPrintWriter; import com.thoughtworks.xstream.io.xml.XppDriver; public class XStreamXmlUtil { /** XML转Bean对象 */ @SuppressWarnings("unchecked") public static <T> T xmlToBean(String xml, Class<T> clazz) { XStream xstream = new XStream(); xstream.registerConverter(new DateConverter()); xstream.autodetectAnnotations(true); xstream.processAnnotations(clazz); xstream.setClassLoader(clazz.getClassLoader()); return (T) xstream.fromXML(xml); } /** Bean对象转XML */ public static String beanToXml(Object bean) { // return "<?xml version=\"1.0\" encoding=\"utf-8\"?>" + new XStream().toXML(bean); XStream xstream = new XStream(); xstream.registerConverter(new DateConverter()); xstream.autodetectAnnotations(true); return xstream.toXML(bean); } }
3、测试类
import java.util.ArrayList; import java.util.Date; import java.util.List; import org.junit.Test; import com.tzz.test.util.xml.entity.Role; import com.tzz.test.util.xml.entity.User; import com.tzz.util.xml.XStreamXmlUtil; public class TestXStreamXmlUtil { @Test public void testBeanToXml() { try { User user = new User(); user.setId(1); user.setName("Test"); user.setAge(20); user.setSex("1"); user.setBirthday(new Date()); Role role = new Role(); role.setId(1); role.setName("角色1"); Role role2 = new Role(); role2.setId(2); role2.setName("角色2"); List<Role> roles = new ArrayList<Role>(); roles.add(role); roles.add(role2); user.setRoles(roles); String xml = XStreamXmlUtil.beanToXml(user); System.out.println(xml); } catch (Exception e) { e.printStackTrace(); } } @Test public void testXmlToBean() { String xml = "<user id='1'>"+ "<name>Test</name>"+ "<sex>1</sex>"+ "<birthday>2016-03-10 16:12:46</birthday>"+ "<roles>"+ "<id>1</id>"+ "<name>角色1</name>"+ "</roles>"+ "<roles>"+ "<id>2</id>"+ "<name>角色2</name>"+ "</roles>"+ "</user>"; User user = XStreamXmlUtil.xmlToBean(xml, User.class); System.out.println(user.getId() + "--" + user.getName()); List<Role> roles = user.getRoles(); for (Role r : roles) { System.out.println(r.getName()); } } }
4、测试结果
4.1、运行testBeanToXml方法
<user id="1"> <name>Test</name> <sex>1</sex> <birthday>2016-03-10 17:35:41</birthday> <roles> <id>1</id> <name>角色1</name> </roles> <roles> <id>2</id> <name>角色2</name> </roles> </user>
4.2、运行testXmlToBean方法
1--Test 角色1 角色2
以上就是XStream实现Bean与xml互转的代码示例的详细内容,更多请关注其它相关文章!
下一篇: XML PULL和PUSH技术的区别