JAXB(Java API for XML Binding), 是jax-rs jax-ws底層使用的對象與xml之間轉換的工具。在java api 中javax.xml.bind
JAXB中的註解,用來根據java類生成xml內容,同樣可以生成json格式的. jaxb已經進入rt.jar
JAXB Annotation- @XmlRootElement // xml 文件的根元素,將類或枚舉類型映射到 XML 元素。
- @XmlElement //Maps a JavaBean property to a XML element derived from property name.
- @XmlAccessorType // 控制默認情況下是否對字段或 Javabean 屬性進行系列化。默認值 XmlAccessType.PUBLIC_MEMBER
- @XmlTransient //Prevents the mapping of a JavaBean property/type to XML representation.
- @XmlJavaTypeAdapter // Use an adapter that implements
XmlAdapter
for custom marshaling.
默認規則:
默認情況下,如果包中不存在 @XmlAccessorType,那麼假定使用以下包級別註釋。
@XmlAccessorType(XmlAccessType.PUBLIC_MEMBER)
默認情況下,如果類中不存在 @XmlAccessorType,並且沒有任何超類是使用 @XmlAccessorType 註釋的,則假定在類中使用以下默認註釋:
@XmlAccessorType(XmlAccessType.PUBLIC_MEMBER)
可能值:
FIELD: JAXB 綁定類中的每個非靜態、非瞬態字段將會自動綁定到 XML,除非由 XmlTransient 註釋。
NONE: 所有字段或屬性都不能綁定到 XML,除非使用一些 JAXB 註釋專門對它們進行註釋。
PROPERTY: JAXB 綁定類中的每個獲取方法/設置方法對將會自動綁定到 XML,除非由 XmlTransient 註釋。
PUBLIC_MEMBER:每個公共獲取方法/設置方法對和每個公共字段將會自動綁定到 XML,除非由 XmlTransient 註釋。
XmlRootElement
對於根元素,可以設置屬性:
@XmlRootElement(name="b" nameSpace="http://test")這樣,在生成的xml文件中,<boy> 標籤 就會變爲 <b> 標籤。並且加上一個命名空間。
XmlJavaTypeAdaptor
- @XmlRootElement
- @XmlAccessorType(XmlAccessType.PROPERTY)
- public class Boy {
- private String name = "CY";
- private Address address; // 是一個接口
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- }
在 java object 轉換成 xml 的時候,接口Address 無法被轉換。
所以 這裏要加上 @XmlJavaTypeAdapter(AddressAdapter.class)
所以 要多寫一個AddressAdaptor 類。
這個類會返回Address接口的一個具體實現類的對象。