java xml與實體類轉換

@XmlRootElement註解定義xml的根節點 通過name改變根節點的xml值

                    @XmlRootElement(name = "amimal_test")

@XmlType註解 指定序列生成的xml節點順序

                 @XmlType(propOrder={"id","age","name","birthDay","list","person","map"})
               @XmlType的propOrder 屬性時,必須列出JavaBean對象中的所有屬性【是javaBean裏面的屬性 跟XmlElement的name設置無關】,否則會報錯
@XmlAccessorOrder註解 指定生成xml節點的方式  默認是XmlAccessorOrder.UNDEFINED無序 還可設置XmlAccessorOrder.ALPHABETICAL按照屬性的字母排序
注意:  @XmlType(propOrder和@XmlAccessorOrder同時存在時 以@XmlType(propOrder爲準

@XmlAccessorType 用於指定由java對象生成xml文件時對java對象屬性的訪問方式。
           常與@XmlRootElement、@XmlType一起使用。它的屬性值是XmlAccessType的4個枚舉值,分別爲:

                            XmlAccessType.FIELD:java對象中的所有成員變量
                            XmlAccessType.PROPERTY:java對象中所有通過getter/setter方式訪問的成員變量
                            XmlAccessType.PUBLIC_MEMBER:java對象中所有的public訪問權限的成員變量和通過getter/setter方式訪問的成員變量
                            XmlAccessType.NONE:java對象的所有屬性都不映射爲xml的元素

 注意:@XmlAccessorType的默認訪問級別是XmlAccessType.PUBLIC_MEMBER,
因此,如果java對象中的private成員變量設置了public權限的getter/setter方法,就不要在private變量上使用@XmlElement和@XmlAttribute註解,
只能在getter/setter方法上使用@XmlElement和@XmlAttribute註解,否則由java對象生成xml時會報同一個屬性在java類裏存在兩次的錯誤。
同理,如果@XmlAccessorType的訪問權限爲XmlAccessType.NONE,如果在java的成員變量上使用了

@XmlElement或@XmlAttribute註解,這些成員變量依然可以映射到xml文件。

@XmlTransient用於標示在由java對象映射xml時,忽略此屬性,在生成的xml文件中不出現此元素。

@XmlAttribute:該屬性作爲類xml節點的attribute

 @XmlElement:該屬性作爲xml的element,且可以增加屬性(name="NewElementName"),那麼生成的xml串的elment的標籤是NewElementName

 @XmlElementWrapper 修改節點的名字


修改xml的namespace 需要再package-info.java文件中添加註解

@XmlSchema(
namespace="http://hyj.cn",
elementFormDefault=XmlNsForm.QUALIFIED)

package com.hyj.xml;
import javax.xml.bind.annotation.*;


 @XmlJavaTypeAdapter
JAXB能夠內置支持List和Set集合,但是對於Map的支持需要自己處理
繼承自抽象類XmlAdapter<ValueType,BoundType> 重寫marshal和unmarshal的方法
類型參數:
    BoundType - JAXB 不知道如何處理的一些類型。編寫一個適配器,以便允許通過 ValueType 將此類型用作內存表示形式。
    ValueType - JAXB 無需其他操作便知道如何處理的類型。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章