jaxb中对java.util.Date的处理

JAXB是个好东西,转换JAVA OBJECT到XML的,最近发现JAXB中对java.util.Date的转换有些要注意的地方,笔记之。 


比如有一个POJO如下: 
  
Java代码   收藏代码
  1. import java.util.Date;  
  2.   
  3. public class Company {  
  4.   
  5.  private int id;  
  6.   
  7.  private String company;  
  8.   
  9.  private double price;  


  另外一个POJO,其中持有的是list类型的Company,如下: 
Java代码   收藏代码
  1. package com.loiane.model;  
  2.   
  3. import java.util.List;  
  4.   
  5. import javax.xml.bind.annotation.XmlElement;  
  6. import javax.xml.bind.annotation.XmlRootElement;  
  7.   
  8. @XmlRootElement(name="companies")  
  9. public class Companies {  
  10.   
  11.  @XmlElement(required = true)  
  12.  private List<Company> list;  
  13.   
  14.  public void setList(List<Company> list) {  
  15.   this.list = list;  
  16.  }  
  17. }  

   
  这样通过spring mvc出来的XML会发现: 


Java代码   收藏代码
  1. @RequestMapping(value="/company/view.action")  
  2.   
  3. public @ResponseBody Companies view() throws Exception {}  


 
Java代码   收藏代码
  1. <companies>  
  2.  <list>  
  3.   <change>0.02</change>  
  4.   <company>3m Co</company>  
  5.   <id>1</id>  
  6.   <lastChange>2011-09-01T00:00:00-03:00</lastChange>  
  7.   。。  
  8.  </list>  
  9.  。。。。。。。  
  10. </companies>  


  时间格式不对头,查阅了下,发现要继承XmlAdapter,重写其中的方法去对日期进行格式化, 
 
Java代码   收藏代码
  1. import java.text.SimpleDateFormat;  
  2. import java.util.Date;  
  3.   
  4. import javax.xml.bind.annotation.adapters.XmlAdapter;  
  5.   
  6. public class JaxbDateSerializer extends XmlAdapter<String, Date>{  
  7.   
  8.  private SimpleDateFormat dateFormat = new SimpleDateFormat("MM-dd-yyyy");  
  9.   
  10.     @Override  
  11.     public String marshal(Date date) throws Exception {  
  12.         return dateFormat.format(date);  
  13.     }  
  14.   
  15.     @Override  
  16.     public Date unmarshal(String date) throws Exception {  
  17.         return dateFormat.parse(date);  
  18.     }  
  19. }  


然后在需要对日期处理的属性中,加入 
  @XmlJavaTypeAdapter ,即: 

Java代码   收藏代码
  1. package com.loiane.model;  
  2.   
  3. import java.util.Date;  
  4.   
  5. import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;  
  6.   
  7. import com.loiane.util.JaxbDateSerializer;  
  8.   
  9. public class Company {  
  10.   
  11.  private int id;  
  12.   
  13.  private String company;  
  14.   
  15.    
  16.  @XmlJavaTypeAdapter(JaxbDateSerializer.class)  
  17.  public Date getLastChange() {  
  18.   return lastChange;  
  19.  }  
  20.   
  21. }  


  就可以生成合乎规格的信息咯,如下 
Java代码   收藏代码
  1. <companies>  
  2.  <list>  
  3.   <change>0.02</change>  
  4.   <company>3m Co</company>  
  5.   <id>1</id>  
  6.   <lastChange>09-01-2011</lastChange>  
  7.     
  8.  </list>  
  9. 。。。。。。。。。  
  10. </companies>  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值