XString在xml和Object之間來回轉換時xml頭聲明問題

 

 

想到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的,卻沒有寫出這句話的。

相關文章
相關標籤/搜索