JAXB(Java API for XML Binding)java轉發爲xml對象
在JAXB中(用於java和xml之前相互轉換)經常會出現各類的@xmlElement這樣的標記,下面就來舉一個例子進行學習:
import java.util.*;
import javax.xml.bind.annotation.*;
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Customer {
private List<String> emailAddresses;
public Customer() {
emailAddresses = new ArrayList<String>();
}
public List<String> getEmailAddresses() {
return emailAddresses;
}
public void setEmailAddresses(List<String> emailAddresses) {
this.emailAddresses = emailAddresses;
}
}
這個是一個典型的POJO了,其中引用了對象emailAddress,是一個List,那麼下面演示各類用法:
先看默認的調用代碼如下:
import javax.xml.bind.JAXBContext;
import javax.xml.bind.Marshaller;
public class Demo {
public static void main(String[] args) throws Exception {
JAXBContext jc = JAXBContext.newInstance(Customer.class);
Customer customer = new Customer();
customer.getEmailAddresses().add("[email protected]");
customer.getEmailAddresses().add("[email protected]");
Marshaller marshaller = jc.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.marshal(customer, System.out);
}
}
默認的把這個對象輸出爲一般的XML:
<customer>
<emailAddresses>[email protected]</emailAddresses>
<emailAddresses>[email protected]</emailAddresses>
</customer>
下面逐一看每個註解的用法
@XmlElement
@XmlElement(name="email-address")
private List<String> emailAddresses;
加上這個註解的話,則按自定義的xml標籤名去輸出某個屬性,如下:
<customer>
<email-address>[email protected]</email-address>
<email-address>[email protected]</email-address>
</customer>
- @XmlElementWrapper
這個註解等於在最外面再包一層了
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Customer {
@XmlElementWrapper(name="email-addresses")
@XmlElement(name="email-address")
private List<String> emailAddresses;
}
輸出
<customer>
<email-addresses>
<email-address>[email protected]</email-address>
<email-address>[email protected]</email-address>
</email-addresses>
</customer>
- @XmlList
這個等於是在同一行中,把list中的輸出,以空格形式分隔開來,
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Customer {
@XmlList
private List<String> emailAddresses;
}
輸出
<customer>
<emailAddresses>[email protected] [email protected]</emailAddresses>
</customer>
- @XmlList和 @XmlAttribute混合使用
@XmlList
@XmlAttribute
private List<String> emailAddresses;
輸出
<customer
emailAddresses="[email protected] [email protected]"/>
就是同一行中逗號輸出,並作爲customer的一個屬性
- @XmlList 和 @XmlValue混用
@XmlList
@XmlValue
private List<String> emailAddresses;
輸出
就是把emailAddress的list的值,作爲的value 輸出,結果如下:
<customer>[email protected] [email protected]</customer>