XStream使用记录

环境介绍

开发工具:IDEA 2022.1.1
SpringBoot版本:2.1.17.RELEASE

步骤说明

1、pom依赖

		<dependency>
            <groupId>com.thoughtworks.xstream</groupId>
            <artifactId>xstream</artifactId>
            <version>1.4.10</version>
        </dependency>

2、xml内容

<?xml version="1.0" encoding="UTF-8"?>
<books>
 <book id="b001" type="数据库">Mysql排错指南</book>
 <book id="b002" type="JAVA">Java从入门到精通</book>
</books>

3、Books实体类

@Data
@ToString
//元素节点名
@XStreamAlias("books")
public class Books {

    //元素节点名
    @XStreamImplicit(itemFieldName = "book")
    List<Book> bookList;
}

4、Book实体类

@Data
@ToString
@AllArgsConstructor
@NoArgsConstructor
//元素节点名
@XStreamAlias("book")
//元素节点值
@XStreamConverter(value = ToAttributedValueConverter.class,strings = {"value"})
public class Book {
    //节点属性,名字与xml中的一样
    @XStreamAsAttribute
    private String id;
    //节点属性,名字与xml中的一样
    @XStreamAsAttribute
    private String type;
    //元素节点值,名称任意取,与@XStreamConverter中的保持一致
    private String value;
}

5、Xml工具类

public class XmlUtils {
    /**
     * XML转对象
     *  @param clazz 对象类
     * @param xml xml字符串
     * @param <T> T
     * @return
     */
    public static <T> T parseFromXml(Class<T> clazz, String xml) {
        // 创建解析XML对象
        XStream xStream = new XStream(new DomDriver());
        // 允许访问特定类型
        xStream.addPermission(NoTypePermission.NONE);
        xStream.allowTypeHierarchy(clazz);
        // 处理注解
        xStream.processAnnotations(clazz);
        // 将XML字符串转为bean对象
        T t = (T) xStream.fromXML(xml);
        return t;
    }

    /**
     * 对象转xml
     * @param obj 对象
     * @return
     */
    public static String toXml(Object obj) {
        XStream xStream = new XStream(new DomDriver());
        xStream.processAnnotations(obj.getClass());
        return xStream.toXML(obj);
    }
}

6、测试

 @org.junit.Test
    public void test() throws Exception {
        String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
                "<books>\n" +
                " <book id=\"b001\" type=\"数据库\">Mysql排错指南</book>\n" +
                " <book id=\"b002\" type=\"JAVA\">Java从入门到精通</book>\n" +
                "</books>";
        Books books1 = XmlUtils.parseFromXml(Books.class, xml);
        System.out.println(books1);

        System.out.println("------------------------");
        Books books2 = new Books();
        Book book3 = new Book("b0003","数据结构","数据结构与算法分析");
        Book book4 = new Book("b0004","Python","Python学习手册");
        List<Book> bookList = new ArrayList<>();
        bookList.add(book3);
        bookList.add(book4);
        books2.setBookList(bookList);
        System.out.println(XmlUtils.toXml(books2));
    }

7、结果

Books(bookList=[Book(id=b001, type=数据库, value=Mysql排错指南), Book(id=b002, type=JAVA, value=Java从入门到精通)])
------------------------
<books>
  <book id="b0003" type="数据结构">数据结构与算法分析</book>
  <book id="b0004" type="Python">Python学习手册</book>
</books>
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值