jaxb中对java.util.Date的处理

来源:转载

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

比如有一个POJO如下:

import java.util.Date;public class Company { private int id; private String company; private double price;


另外一个POJO,其中持有的是list类型的Company,如下:
package com.loiane.model;import java.util.List;import javax.xml.bind.annotation.XmlElement;import javax.xml.bind.annotation.XmlRootElement;@XmlRootElement(name="companies")public class Companies { @XmlElement(required = true) private List<Company> list; public void setList(List<Company> list) { this.list = list; }}


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


@RequestMapping(value="/company/view.action")public @ResponseBody Companies view() throws Exception {}


<companies> <list> <change>0.02</change> <company>3m Co</company> <id>1</id> <lastChange>2011-09-01T00:00:00-03:00</lastChange> 。。 </list> 。。。。。。。</companies>


时间格式不对头,查阅了下,发现要继承XmlAdapter,重写其中的方法去对日期进行格式化,
import java.text.SimpleDateFormat;import java.util.Date;import javax.xml.bind.annotation.adapters.XmlAdapter;public class JaxbDateSerializer extends XmlAdapter<String, Date>{ private SimpleDateFormat dateFormat = new SimpleDateFormat("MM-dd-yyyy"); @Override public String marshal(Date date) throws Exception { return dateFormat.format(date); } @Override public Date unmarshal(String date) throws Exception { return dateFormat.parse(date); }}


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

package com.loiane.model;import java.util.Date;import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;import com.loiane.util.JaxbDateSerializer;public class Company { private int id; private String company; @XmlJavaTypeAdapter(JaxbDateSerializer.class) public Date getLastChange() { return lastChange; }}


就可以生成合乎规格的信息咯,如下
<companies> <list> <change>0.02</change> <company>3m Co</company> <id>1</id> <lastChange>09-01-2011</lastChange> </list>。。。。。。。。。</companies>



分享给朋友:
您可能感兴趣的文章:
随机阅读: