JAXB(Java API for XML Binding)java轉發爲xml對象

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>
  1. @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>
  1. @XmlList
    這個等於是在同一行中,把list中的輸出,以空格形式分隔開來,
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Customer {
 
    @XmlList
    private List<String> emailAddresses;
 
}

輸出

<customer> 
    <emailAddresses>[email protected] [email protected]</emailAddresses> 
</customer>
  1. @XmlList和 @XmlAttribute混合使用
@XmlList 
    @XmlAttribute 
    private List<String> emailAddresses; 

輸出


<customer 
    emailAddresses="[email protected] [email protected]"/>

就是同一行中逗號輸出,並作爲customer的一個屬性

  1. @XmlList 和 @XmlValue混用
    @XmlList 
    @XmlValue 
    private List<String> emailAddresses;

輸出
就是把emailAddress的list的值,作爲的value 輸出,結果如下:

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