生活随笔
收集整理的這篇文章主要介紹了
xstream中几个注解的含义和用法(转)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
XStream是個很強大的工具,能將Java對象和xml之間相互轉化。xstream不在意java類中成員變量是私有還是公有,也不在乎是否有默認構造函數。它調用方式也非常簡單:從xml對象轉化為java對象,使用fromXML()方法;從java對象序列化為xml,toXML()即可,很方便。xstream也支持注解方式,這些都是為了簡化輸出而設計,下面為大家簡單說一下這幾個注解的含義和用法。
1. 當沒有任何注解情況下
[java]?view plaincopy
public?class?Cat?{????????????private?String?name;????????????private?Integer?age;????????????private?List<Ball>?balls;????????????????Cat(String?name,Integer?age,List<Ball>?balls){????????????this.name?=?name;????????????this.age?=?age;????????????this.balls=balls;????????}???????? ?
其中Ball定義如下:
?
[java]?view plaincopy
public?class?Ball?{??????????private?String?color;????????Ball(String?color){??????????this.color?=?color;??????}?? ?
沒有任何注解,輸出如下:
?
[java]?view plaincopy
public?static?void?main(String[]?args)?throws?Exception{??????????????????List<Ball>?balls?=?new?ArrayList<Ball>();??????????balls.add(new?Ball("red"));??????????Cat?cat?=?new?Cat("餛飩",1,balls);??????????????????????????FileOutputStream?fout?=?new?FileOutputStream("D:/cat.xml");??????????XStream?xs?=?new?XStream();??????????xs.toXML(cat,fout);??????}<span?style="font-size:14px;">??</span>?? 得到Cat.xml如下
?
?
[java]?view plaincopy
<com.timejob.node.Cat>????<name>餛飩</name>????<age>1</age>????<balls>??????<com.timejob.node.Ball>????????<color>red</color>??????</com.timejob.node.Ball>????</balls>??</com.timejob.node.Cat>??
1.?@XStreamAlias("cat") 等同于?xstream.alias("cat", Cat.class);?
?
?
[java]?view plaincopy
@XStreamAlias("cat")??public?class?Cat?{??????????private?String?name;??????????private?Integer?age;??????????private?List<Ball>?balls;?? ?
我們需要明確給出,哪個類的注解需要被激活:
?
[java]?view plaincopy
public?static?void?main(String[]?args)?throws?Exception{??????????????????List<Ball>?balls?=?new?ArrayList<Ball>();??????????balls.add(new?Ball("red"));??????????Cat?cat?=?new?Cat("餛飩",1,balls);??????????????????????????FileOutputStream?fout?=?new?FileOutputStream("D:/cat.xml");??????????XStream?xs?=?new?XStream();??????????????????xs.processAnnotations(Cat.class);????????xs.toXML(cat,fout);??????}?? 當我們在Cat類名使用該注解時,表明該類序列化為xml時,類名com.timejob.node.Cat將替換成cat輸出,這樣使得xml更清晰簡短:
?
?
[java]?view plaincopy
<cat>????<name>餛飩</name>????<age>1</age>????<balls>??????<com.timejob.node.Ball>????????<color>red</color>??????</com.timejob.node.Ball>????</balls>??</cat>??
2. XStreamAsAttribute 作用是將類內成員作為父節點屬性輸出,等同于xstream.useAttributeFor(Cat.class, "name")
?
?
[java]?view plaincopy
@XStreamAlias("cat")??public?class?Cat?{??????????@XStreamAsAttribute?????private?String?name;??????????private?Integer?age;??????????private?List<Ball>?balls;???????? 其他代碼保持不變,輸出后cat.xml如下:
?
?
[java]?view plaincopy
<cat?name="餛飩">????<age>1</age>????<balls>??????<com.timejob.node.Ball>????????<color>red</color>??????</com.timejob.node.Ball>????</balls>??</cat>?? 我們看到name屬性已經作為 cat的屬性輸出在根節點上
?
3. @XStreamAlias 作用就是將屬性按照別名輸出,等同于xstream.aliasField("catAge", Cat.class, "age");
?
[java]?view plaincopy
@XStreamAlias("cat")??public?class?Cat?{??????????@XStreamAsAttribute??????private?String?name;??????????@XStreamAlias("catAge")??????private?Integer?age;??????????private?List<Ball>?balls;?? 得到cat.xml文件如下:
?
?
[java]?view plaincopy
<cat?name="餛飩">????<catAge>1</catAge>????<balls>??????<com.timejob.node.Ball>????????<color>red</color>??????</com.timejob.node.Ball>????</balls>??</cat>?? 4.對于集合常用的注解 @XStreamImplicit 去除<Balls></Balls>顯示,只顯示之間的<Ball></Ball>節點元素
?
[java]?view plaincopy
@XStreamAlias("cat")??public?class?Cat?{??????????@XStreamAsAttribute??????private?String?name;??????????@XStreamAlias("catAge")??????private?Integer?age;??????????@XStreamImplicit????????private?List<Ball>?balls;?? ?
此時輸出如下:
?
[java]?view plaincopy
<cat?name="餛飩">????<catAge>1</catAge>????<com.timejob.node.Ball>??????<color>red</color>????</com.timejob.node.Ball>??</cat>?? 這樣看起來就更加簡潔了。
?
4.還有幾個注解,都是比較好理解的,如@XStreamOmitField 表明該屬性不會被序列化到xml中。
?
[java]?view plaincopy
@XStreamAlias("cat")??public?class?Cat?{??????????@XStreamAsAttribute??????private?String?name;??????????@XStreamAlias("catAge")??????private?Integer?age;??????????@XStreamImplicit??????private?List<Ball>?balls;??????@XStreamOmitField????????????private?String?noCare;?? ?
?
常用的就這么幾個,其他的再討論和學習吧。
轉載于:https://www.cnblogs.com/Syria/p/6422280.html
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎
總結
以上是生活随笔為你收集整理的xstream中几个注解的含义和用法(转)的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。