微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

一、导入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

原文地址:https://www.jb51.cc/xml/1194165.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。