XStream实现Bean与xml互转的代码示例
16lz
2021-01-22
一、导入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 {@XStreamAsAttributeprivate Integer id;private String name;@XStreamOmitFieldprivate 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 {@Testpublic 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();}}@Testpublic 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
更多相关文章
- 关于定义颜色的10篇文章推荐
- XmlTextWriter函数定义与用法汇总
- XDocument函数定义与用法汇总
- 方式性能函数定义与用法汇总
- jQuery自定义样式下拉框,支持分组、多选和搜索
- Vue.js流程图插件 可自定义流程节点事件
- 从一份定义文件详解ELK中Logstash插件结构
- HTML5中国象棋游戏,可自定义难度
- 10年漫威,到底有多少角色。