有時,有的類和xml無法完全綁定,即xml和類中的某個屬性無法綁定;同時JAXB要求類必須有個默認的構造函數,否則會出現如下錯誤
error: java.sql.Timestamp does not have a no-arg default constructor
注:這裏用java.sql.Timestamp 表示無法和xml綁定的類
這個時候我們要寫一個繼承自XmlAdapter的adapter類,如下:
import java.sql.Timestamp;
import java.util.Date;
import javax.xml.bind.annotation.adapters.XmlAdapter;
public class TimestampAdapter extends XmlAdapter<Date, Timestamp> {
public Date marshal(Timestamp t) {
return new Date(t.getTime());
}
public Timestamp unmarshal(Date d) {
return new Timestamp (d.getTime());
}
}
然後使用@XmlJavaTypeAdapter標記到使用java.sql.Timestamp類的地方,例如:
@XmlRootElement
public class InfoDTO {
private Timestamp createTime;
...
@XmlJavaTypeAdapter(Timestamp.class)
public Timestamp getCreateTime() {
return this.createTime;
}
}
更多請參考: http://weblogs.java.net/blog/2005/09/30/using-jaxb-20s-xmljavatypeadapter