使用XStream实现Xml与Java对象转换(XML)

XStream 是一个流行的 Java 库,用于将对象序列化为 XML 格式或将 XML 数据反序列化为对象。它允许 Java 开发人员轻松地处理 XML 数据和 Java 对象之间的转换,而无需手动编写繁琐的 XML 解析和生成代码

示例如下:

1、首先,引入相应的maven依赖

1  <dependency>
2      <groupId>com.thoughtworks.xstream</groupId>
3      <artifactId>xstream</artifactId>
4      <version>1.4.20</version>
5  </dependency>

2、创建实体类

 1   @Data
 2   @XStreamAlias("部门列表")
 3   public class Department {
 4   
 5       @XStreamAlias("部门名称")
 6       private String name;
 7   
 8       @XStreamAlias("联系电话")
 9       private String  phone;
10  
11       @XStreamAlias("员工")
12       private User user;
13  }
 1 @Data
 2 @XStreamAlias("员工")
 3 public class User {
 4 
 5     @XStreamAlias("姓名")
 6     private String name;
 7 
 8     @XStreamAlias("年龄")
 9     private Integer age;
10 
11     @XStreamAlias("性别")
12     private String sex;
13 }

3、创建一个实现Xml转换的工具类

 1 public class XmlUtils {
 2     /**
 3      * xstream初始化
 4      */
 5     private static final XStream XSTREAM = new XStream(new DomDriver());
 6     /**
 7      * 添加合法的包名,否则无法解析xml,使用时需要改成自己工程的包名
 8      */
 9     private static final String PACKET = "com.example.demo.**";
10 
11     /**
12      * 将xml字符串转为department对象
13      *
14      * @param xmlString xml字符串
15      */
16     public static Department xmlToDepart(String xmlString) {
17         XSTREAM.allowTypesByWildcard(new String[]{PACKET});
18         XSTREAM.processAnnotations(Department.class);
19         return (Department) XSTREAM.fromXML(xmlString);
20     }
21 
22     /**
23      * 将department对象转为xml字符串
24      */
25     public static String departToXml(Department department) {
26         //设置别名映射
27         XSTREAM.processAnnotations(Department.class);
28         // 转换的字符串前面加上xml说明
29         return "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + XSTREAM.toXML(department);
30     }
31 }

4、在测试类中进行转换测试

4.1、将Java对象转换为Xml字符串并导出

 1    @Test
 2    void ToXml()  {
 3         try {
 4 
 5             User user = new User();
 6             user.setName("Tom");
 7             user.setAge(11);
 8             user.setSex("男");
 9 
10             Department department = new Department();
11             department.setName("研发部");
12             department.setPhone("13188887777");
13             department.setUser(user);
14 
15             // Java对象转换成xml字符串
16             String xml = XmlUtils.departToXml(department);
17 
18             FileWriter writer = null;
19             writer = new FileWriter("C:\\Users\\16056\\Desktop\\test.xml", false);
20             writer.write(xml);
21             writer.flush();
22             writer.close();
23 
24         } catch (Exception e) {
25             e.printStackTrace();
26         }
27    }

测试结果

4.2、导入Xml文件并转换为Java对象

 1     @Test
 2     void ToObj(){
 3         File file = new File("C:\\Users\\16056\\Desktop\\test.xml");
 4         long fileLengthLong = file.length();
 5         byte[] fileContent = new byte[(int) fileLengthLong];
 6         try {
 7             FileInputStream inputStream = new FileInputStream(file);
 8             inputStream.read(fileContent);
 9             inputStream.close();
10             String string = new String(fileContent);
11 
12             // xml字符串转换成对象
13             Department department = XmlUtils.xmlToDepart(string);
14 
15             System.out.println("department:" + department);
16             
17         } catch (Exception e) {
18             e.printStackTrace();
19         }
20     }

tip:fileContent不能使用toString方法,因为返回值是对象名称+哈希值,例byte[]@1a2b3c4d

测试结果:

 

posted @ 2023-09-13 09:36  xiaogh  阅读(1753)  评论(0)    收藏  举报