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>
/*
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的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 死亡超100万例!美国疾控中心:不再建议
- 下一篇: 本地计算机绑定域名访问