我对jaxb unmarshalling有一点问题。
我有一段xml:
render_to_string
一个项目在java代码中表示为Item类:
<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>
所以,当我试图解组这个xml时,我得到@XmlType
public class Item{
private String title;
//link and comments I'm temporary skipping
@XmlElement(name = "pubDate")
private Date publicDate;
//getters and setters
}
等于null。
我做错了什么?请指教。
答案 0 :(得分:0)
您需要让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
注释,并为publicDate
注释getter。 @XmlAccessorType
的默认行为是绑定每个公共字段和/或公共getter / setter。
答案 1 :(得分:0)
如果日期格式与xsd类型dateTime匹配,则JAXB只允许您自动解组到java.util.Date实例:yyyy-MM-ddTHH:mm:ss
;但是样本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