xml与java对象转换 -- XStreamAlias
?
@XStreamAlias使用
一、 特點(diǎn):
簡化的API;?
無映射文件;?
高性能,低內(nèi)存占用;?
整潔的XML;?
不需要修改對象;支持內(nèi)部私有字段,不需要setter/getter方法?
提供序列化接口;?
自定義轉(zhuǎn)換類型策略;?
XStream的優(yōu)點(diǎn)很多,但是也有一些小bug,比如在定義別名中的下劃線“_”轉(zhuǎn)換為xml后會(huì)變成“__”這個(gè)符號(hào), 不過下劃線問題可以用下面這個(gè)解決
?XStream xStream = new XStream(new XppDriver(new XmlFriendlyNameCoder("_-", "_")));
二、 使用場景
Transport轉(zhuǎn)換?
Persistence 持久化對象?
Configuration 配置?
Unit Tests 單元測試
Interface服務(wù)之間XML消息的交互
?
案例代碼:
@XStreamAlias("kfpt_dept") //注意這個(gè),后面變成了<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);}}?
轉(zhuǎn)換工具類:
public class XstreamUtil {/*** 將bean轉(zhuǎn)換為xml* @param obj 轉(zhuǎn)換的bean* @return bean轉(zhuǎn)換為xml*/public static String objectToXml(Object obj) {// XStream xStream = new XStream();?XStream xStream = new XStream(new XppDriver(new XmlFriendlyNameCoder("_-", "_")));//解決下劃線問題//xstream使用注解轉(zhuǎn)換 xStream.processAnnotations(obj.getClass());return xStream.toXML(obj);}/*** 將xml轉(zhuǎn)換為bean* @param <T> 泛型* @param xml 要轉(zhuǎn)換為bean的xml* @param cls bean對應(yīng)的Class* @return xml轉(zhuǎn)換為bean*/public static <T> T xmlToObject(String xml, Class<T> cls){XStream xstream = new XStream(new DomDriver());//xstream使用注解轉(zhuǎn)換 xstream.processAnnotations(cls);return (T) xstream.fromXML(xml);} }
?
main方法測試
public static void main(String[] args) {//java bean 轉(zhuǎn) 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("開放平臺(tái)");d.setStaffs(staffs);System.out.println(objectToXml(d));/*
用這個(gè)方法 XStream xStream = new XStream(); 會(huì)有下劃線問題
<kfpt__dept>
<deptName>開放平臺(tái)</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>開放平臺(tái)</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>
/*
com.cmcc.open.ss.vo.req.Dept@5660d2d2[
deptName=開放平臺(tái)
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
]]
]
*/
}
?
轉(zhuǎn)載于:https://www.cnblogs.com/wuyun-blog/p/7800067.html
總結(jié)
以上是生活随笔為你收集整理的xml与java对象转换 -- XStreamAlias的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 死亡超100万例!美国疾控中心:不再建议
- 下一篇: 雷军给我灌了三杯鸡汤 还请我吃了全家桶