JAXB中各种常见注解小结

在JAXB中(用于JAVA对象和xml之间的转换),经常出现各类的 @XmlElement这样的标记, 
下面就来以一个例子小结下,加深学习: 

Java代码   收藏代码
  1. import java.util.*;  
  2. import javax.xml.bind.annotation.*;  
  3.    
  4. @XmlRootElement  
  5. @XmlAccessorType(XmlAccessType.FIELD)  
  6. public class Customer {  
  7.    
  8.     private List<String> emailAddresses;  
  9.        
  10.     public Customer() {  
  11.         emailAddresses = new ArrayList<String>();  
  12.     }  
  13.    
  14.     public List<String> getEmailAddresses() {  
  15.         return emailAddresses;  
  16.     }  
  17.    
  18.     public void setEmailAddresses(List<String> emailAddresses) {  
  19.         this.emailAddresses = emailAddresses;  
  20.     }  
  21.    
  22. }  


这个是一个典型的POJO了,其中引用了对象emailAddress,是一个List,那么下面演示各类用法: 
  先看默认的调用代码如下: 
Java代码   收藏代码
  1. import javax.xml.bind.JAXBContext;  
  2. import javax.xml.bind.Marshaller;  
  3.    
  4. public class Demo {  
  5.    
  6.     public static void main(String[] args) throws Exception {  
  7.         JAXBContext jc = JAXBContext.newInstance(Customer.class);  
  8.    
  9.         Customer customer = new Customer();  
  10.         customer.getEmailAddresses().add("janed@example.com");  
  11.         customer.getEmailAddresses().add("jdoe@example.org");  
  12.    
  13.         Marshaller marshaller = jc.createMarshaller();  
  14.         marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);  
  15.         marshaller.marshal(customer, System.out);  
  16.     }  
  17. }  


  默认的把这个对象输出为一般的XML: 
<customer> 
    <emailAddresses>janed@example.com</emailAddresses> 
    <emailAddresses>jdoe@example.org</emailAddresses> 
</customer> 

下面逐一看每个注解的用法 
1) @XmlElement 
   
@XmlElement(name="email-address") 
    private List<String> emailAddresses; 
加上这个注解的话,则按自定义的xml标签名去输出某个属性,如下: 
<customer> 
    <email-address>janed@example.com</email-address> 
    <email-address>jdoe@example.org</email-address> 
</customer> 

2) @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>janed@example.com</email-address> 
        <email-address>jdoe@example.org</email-address> 
    </email-addresses> 
</customer> 


3) @XmlList 
  这个等于是在同一行中,把list中的输出,以空格形式分隔开来, 
Java代码   收藏代码
  1. @XmlRootElement  
  2. @XmlAccessorType(XmlAccessType.FIELD)  
  3. public class Customer {  
  4.    
  5.     @XmlList  
  6.     private List<String> emailAddresses;  
  7.    
  8. }  


  输出: 
  <customer> 
    <emailAddresses>janed@example.com jdoe@example.org</emailAddresses> 
</customer> 

4) 
@XmlList和 @XmlAttribute混合使用 
      @XmlList 
    @XmlAttribute 
    private List<String> emailAddresses; 

输出: 
   <customer 
    emailAddresses="janed@example.com jdoe@example.org"/> 

看到没?就是同一行中逗号输出,并作为customer的一个属性 


5) 
  @XmlList 和 @XmlValue混用 
    
    @XmlList 
    @XmlValue 
    private List<String> emailAddresses; 
  

就是把emailAddress的list的值,作为<customer>的value  输出,结果如下: 
<customer>janed@example.com jdoe@example.org</customer> 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值