想到Object和XML之間來回搞,我同大多數人同樣,想到了XStream,JAXB,XMLBeans 。懶得去折騰,直接上手XStream.指針
不得不說XStream仍是很強大的,可是有一個問題,我查了好兩三個小時才搞定,也每一個好的博客給寡人講講。code
上代碼,先列出實體類,姑且叫訂單類吧,set/get方法不贅述。xml
public class Order { private String logisticsId ;//訂單號 private String cpCode;//公司編號 private String orderCreateTime;//訂單建立時間 private String orderBizType;//訂單業務類型 …………
而後我就大大方方的Object2XML了。對象
XStream xStream = new XStream(); String params =xStream.toXML(order);
然而,xml確實是沒問題呢,可是xml的頭聲明把個人包名都帶出來了,這個不是我想要的,人家給出的標準格式是<request>……</request>文檔
<com.sdk.share.entity.Order> <logisticsId>ET61465890105002</logisticsId> <cpCode>ET6</cpCode> <orderCreateTime>2016-05-20 1:10:10</orderCreateTime> <orderBizType>1</orderBizType> </com.sdk.share.entity.Order>
因而我看到了一絲但願get
xStream.alias("request",Order.class);
文檔上說這個能夠更換xml的頭聲明,然而,也是好用的。博客
<request> <logisticsId>ET61465890105002</logisticsId> <cpCode>ET6</cpCode> <orderCreateTime>2016-05-20 1:10:10</orderCreateTime> <orderBizType>1</orderBizType> </request>
這個問題解決,也就花了兩分鐘,可是下面這個問題纔是重點。it
當對象發過來xml,一樣也是已<request>……</request>爲xml頭聲明的,我轉對象的時候空指針了,報錯的大致意思就是找不到「request」這個類。io
因而我在網上查到了標註這個玩意。class
@XStreamAlias("request") public class Order { private String logisticsId ;//訂單號 private String cpCode;//公司編號 private String orderCreateTime;//訂單建立時間 private String orderBizType;//訂單業務類型 …………
而後我覺得他會跟Spring同樣,而後並非,他的轉換結果仍是空指針。在千方百計String.replace()還有別的嘗試以後,終於找到了這句話。
//提醒xStream掃描指定類底下的標註,默認狀況下不會掃描 xStream.processAnnotations(Order.class);
就這一句話,解決了個人問題。
而後我在Object2XML的時候將xStream.alias("request",Order.class);這句話註釋掉,加上上面一行代碼生出來的XML也是沒問題的。
縱觀網上那麼多XStream的博客,又是對象跟XML互轉,又是JSON跟xml互轉,又是遍歷list的,卻沒有寫出這句話的。