我已经能够重现您所看到的问题。您可以使用以下错误来跟踪我们在此问题上的进展:
解决方法
日期适配器
您可以使用XmlAdapter
将有问题的日期转换为正确的java.util.Date
.
package forum11145711;
import java.util.Date;
import javax.xml.bind.annotation.adapters.XmlAdapter;
public class DateAdapter extends XmlAdapter<Date, Date>{
@Override
public Date unmarshal(Date date) throws Exception {
return date;
}
@Override
public Date marshal(Date date) throws Exception {
if(null == date) {
return date;
}
return new Date(date.getTime());
}
}
根
@XmlJavaTypeAdapter
注释用于利用XmlAdapter
:
package forum11145711;
import java.util.Date;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
@XmlRootElement
public class Root {
private Date date;
@XmlJavaTypeAdapter(DateAdapter.class)
public Date getDate() {
return date;
}
public void setDate(Date date) {
this.date = date;
}
}
我的约会
下面是java.util.Date
我在这个例子中使用的子类。
package forum11145711;
import java.util.Date;
public class MyDate extends Date {
}
演示
下面是一些演示代码,您可以使用它来证明一切正常:
package forum11145711;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.Marshaller;
public class Demo {
public static void main(String[] args) throws Exception {
JAXBContext jc = JAXBContext.newInstance(Root.class);
Root root = new Root();
root.setDate(new MyDate());
Marshaller marshaller = jc.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.marshal(root, System.out);
}
}
输出
<?xml version="1.0" encoding="UTF-8"?>
<root>
<date>2012-06-27T10:39:49.081</date>
</root>