在jaxb中,涉及到时间的操作,可以参考两种方式。
第一种,使用JAXB自带的XMLGregorianCalendar类型。如果用这个的话,操作数据库的时候必须将该类型进行转换,关键代码如下:
public XMLGregorianCalendar convertToXMLGregorianCalendar(Date date) {
GregorianCalendar cal = new GregorianCalendar();
cal.setTime(date);
XMLGregorianCalendar gc = null;
try {
gc = DatatypeFactory.newInstance().newXMLGregorianCalendar(cal);
} catch (Exception e) {
e.printStackTrace();
}
return gc;
}
public Date convertToDate(XMLGregorianCalendar cal) throws Exception{
GregorianCalendar ca = cal.toGregorianCalendar();
return ca.getTime();
}
第二种,如下:
@XmlRootElement
@XmlAccessorType(XmlAccessType.NONE)
public class Grade {
private String gradeName;
private Timestamp createTime;
public Timestamp getCreateTime() {
return createTime;
}
@XmlAttribute(name="createTime")
public String getCreateTimeStr()throws Exception{
if(createTime!=null){
return TimeUtils.getDateString(createTime.getTime());
}
return null;
}
public void setCreateTime(Timestamp createTime) {
this.createTime = createTime;
}
@XmlElement
public String getGradeName() {
return gradeName;
}
public void setGradeName(String gradeName) {
this.gradeName = gradeName;
}
public static void main(String[] args){
Grade g=new Grade();
g.setGradeName("一年级");
// g.setCreateTime(new Timestamp(new Date().getTime()));
JAXBContext jc;
try {
jc = JAXBContext.newInstance(Grade.class);
Marshaller m=jc.createMarshaller();
m.marshal(g, new FileOutputStream(new File("grade.xml")));
} catch (Exception e) {
e.printStackTrace();
}
}
}
请注意上面代码中红色部分,其中
XmlAccessType.NONE表示: 所有字段或属性都不能绑定到 XML,除非使用一些 JAXB 注释专门对它们进行注释。还有就是
getCreateTimeStr()方法,我们使用
@XmlAttribute(name="createTime")将该方法的返回值绑定。