XStream实现Bean与xml互转的代码示例

互联网 17-3-31
一、导入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互转的代码示例的详细内容,更多内容请关注技术你好其它相关文章!

来源链接:
免责声明:
1.资讯内容不构成投资建议,投资者应独立决策并自行承担风险
2.本文版权归属原作所有,仅代表作者本人观点,不代表本站的观点或立场
上一篇:php获取远程图片并下载保存到本地的方法分析 下一篇:XML PULL和PUSH技术的区别

相关资讯