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>标签:java,jaxb,private,util,Date,import,public From: https://blog.51cto.com/u_14230175/5911341
<list>
<change>0.02</change>
<company>3m Co</company>
<id>1</id>
<lastChange>09-01-2011</lastChange>
</list>
。。。。。。。。。
</companies>