对于映射到日期类型的元素,JAXB返回null
问题描述:
我对jaxb解组有点问题。对于映射到日期类型的元素,JAXB返回null
我有这一块的xml:
<item>
<title>My title</title>
<link>https://some-link/</link>
<comments>Hello world</comments>
<pubDate>Thu, 13 Jan 2016 09:45:06 +0000</pubDate>
</item>
的一个项目是在Java代码中表示为项目类:
@XmlType
public class Item{
private String title;
//link and comments I'm temporary skipping
@XmlElement(name = "pubDate")
private Date publicDate;
//getters and setters
}
所以,当我试图来解读这个XML,我已经有publicDate
等于null。 我做错了什么?请指教。
答
你需要让JAXB知道你是对私人领域的直接注解:
@XmlType
@XmlAccessorType(XmlAccessType.FIELD)
public class Item{
private String title;
//link and comments I'm temporary skipping
@XmlElement(name = "pubDate")
private Date publicDate;
//getters and setters
}
或者,您也可以完全离开了@XmlAccessorType
注释和注释getter方法publicDate
代替。 @XmlAccessorType
的默认行为是绑定每个公共字段和/或公共getter/setter。
答
如果日期格式与xsd类型匹配datetime:yyyy-MM-ddTHH:mm:ss
,那么JAXB将只允许您自动解除java.util.Date实例的绑定;但在你的示例XML格式是不同的,在这种情况下,你需要实现自己的帮手实施XmlAdapter<String,Date>
,如下所示:
public class MyDateFormatAdapter extends XmlAdapter<String, Date> {
private static final String FORMAT = "EEE, dd MMM yyyy HH:mm:ss Z";
public Date unmarshal(String v) throws Exception {
DateFormat dateFormat = new SimpleDateFormat(FORMAT);
return dateFormat.parse(v);
}
}
演示在这里:http://ideone.com/0dngV3
即使我注释类@ XmlAccessorType或在publicDate getter上添加注释,它仍然返回空值 – Volodymyr