日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

xml与java对象转换 -- XStreamAlias

發布時間:2023/12/13 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 xml与java对象转换 -- XStreamAlias 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?

@XStreamAlias使用

一、 特點:

簡化的API;?
無映射文件;?
高性能,低內存占用;?
整潔的XML;?
不需要修改對象;支持內部私有字段,不需要setter/getter方法?
提供序列化接口;?
自定義轉換類型策略;?


XStream的優點很多,但是也有一些小bug,比如在定義別名中的下劃線“_”轉換為xml后會變成“__”這個符號, 不過下劃線問題可以用下面這個解決

?XStream xStream = new XStream(new XppDriver(new XmlFriendlyNameCoder("_-", "_")));

二、 使用場景

Transport轉換?
Persistence 持久化對象?
Configuration 配置?
Unit Tests 單元測試

Interface服務之間XML消息的交互

?

案例代碼:

@XStreamAlias("kfpt_dept") //注意這個,后面變成了<kfpt__dept> 下劃線。。。。 class Dept {private String deptName;private List<Staff> staffs;public String getDeptName() {return deptName;}public void setDeptName(String deptName) {this.deptName = deptName;}public List<Staff> getStaffs() {return staffs;}public void setStaffs(List<Staff> staffs) {this.staffs = staffs;}@Overridepublic String toString() {return ToStringBuilder.reflectionToString(this, ToStringStyle.MULTI_LINE_STYLE);} }@XStreamAlias("kfpt_staffs") class Staff {private String name;private int age;public Staff() {super();}public Staff(String name, int age) {super();this.name = name;this.age = age;}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;}@Overridepublic String toString() {return ToStringBuilder.reflectionToString(this, ToStringStyle.MULTI_LINE_STYLE);}}

?

轉換工具類:

public class XstreamUtil {/*** 將bean轉換為xml* @param obj 轉換的bean* @return bean轉換為xml*/public static String objectToXml(Object obj) {// XStream xStream = new XStream();
?XStream xStream = new XStream(new XppDriver(new XmlFriendlyNameCoder("_-", "_")));//解決下劃線問題
//xstream使用注解轉換 xStream.processAnnotations(obj.getClass());return xStream.toXML(obj);}/*** 將xml轉換為bean* @param <T> 泛型* @param xml 要轉換為bean的xml* @param cls bean對應的Class* @return xml轉換為bean*/public static <T> T xmlToObject(String xml, Class<T> cls){XStream xstream = new XStream(new DomDriver());//xstream使用注解轉換 xstream.processAnnotations(cls);return (T) xstream.fromXML(xml);} }

?

main方法測試

public static void main(String[] args) {//java bean 轉 xmlDept d = new Dept();List<Staff> staffs = new ArrayList<>();Staff s1 = new Staff("wuyun", 20);Staff s2 = new Staff("lilei", 22);staffs.add(s1);staffs.add(s2);d.setDeptName("開放平臺");d.setStaffs(staffs);System.out.println(objectToXml(d));
/*
用這個方法 XStream xStream = new XStream(); 會有下劃線問題

<kfpt__dept>
<deptName>開放平臺</deptName>
<staffs>
<kfpt__staffs>
<name>wuyun</name>
<age>20</age>
</kfpt__staffs>
<kfpt__staffs>
<name>lilei</name>
<age>22</age>
</kfpt__staffs>
</staffs>
</kfpt__dept>

?

XStream xStream = new XStream(new XppDriver(new XmlFriendlyNameCoder("_-", "_")));//可以解決下劃線問題

<kfpt_dept>
<deptName>開放平臺</deptName>
<staffs>
<kfpt_staffs>
<name>wuyun</name>
<age>20</age>
</kfpt_staffs>
<kfpt_staffs>
<name>lilei</name>
<age>22</age>
</kfpt_staffs>
</staffs>
</kfpt_dept>

*///xml 轉 java bean // String xml = "<kfpt__dept><deptName>開放平臺</deptName><staffs><kfpt__staffs><name>wuyun</name><age>20</age></kfpt__staffs><kfpt__staffs><name>lilei</name><age>22</age></kfpt__staffs></staffs></kfpt__dept>";// XStream xstream = new XStream(new DomDriver());// //xstream使用注解轉換// xstream.processAnnotations(Dept.class);// System.out.println(((Dept) xstream.fromXML(xml)).toString());// System.out.println(xmlToObject(xml, Dept.class).toString());
/*

com.cmcc.open.ss.vo.req.Dept@5660d2d2[
deptName=開放平臺
staffs=[com.cmcc.open.ss.vo.req.Staff@6eb1054b[
name=wuyun
age=20
], com.cmcc.open.ss.vo.req.Staff@27d2b7b3[
name=lilei
age=22
]]
]


*/


}

?

轉載于:https://www.cnblogs.com/wuyun-blog/p/7800067.html

總結

以上是生活随笔為你收集整理的xml与java对象转换 -- XStreamAlias的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。