我开始了解jersey如何与JAXB一起使用。但今天我遇到了一个特殊情况,我希望编组一个(日期,列表)条目的地图:
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class MyClass{
@XmlJavaTypeAdapter(MapAdapter.class)
private Map<Date,List<MyObject>> = new TreeMap<Date,List<MyObject>>(new DateCompareDesc());
}
这里的目标是编组一个Map,其条目是一个Date及其对应的MyObject列表。地图按顺序排序。
为此我实现了Map for Map(MapAdapter,关注@Blaise Doughan的教程,http://blog.bdoughan.com/2010/07/xmladapter-jaxbs-secret-weapon.html)。问题出在Date键上。我有一个错误:无法编组java.util.Date。所以我尝试了这个新的日期适配器:
public class DateAdapter extends XmlAdapter<String, Date> {
@Override
public Date unmarshal(String v) throws Exception {
//not implemented
}
@Override
public String marshal(Date v) throws Exception {
return v.toString();
}
}
我可以在哪里添加@XmlJavaTypeAdapter(DateAdapter.class),以便Jersey可以将日期作为我的TreeMap的关键字来进行调整?
感谢。
答案 0 :(得分:1)
JAXB支持将java.util.Date
编组/解组到标准XML模式类型:date,time,dateTime。您可以控制@XmlSchemaType
注释使用的类型。
如果您的日期信息未表示为标准XML架构类型之一,则可以使用XmlAdapter
类似于我对以下类似问题使用的答案:
如果您需要使用XmlAdapter
方法,@XmlJavaTypeAdapter
注释将放置在代表Date
中条目的已调整对象的Map
字段中。以下是基于我的博客的内容:http://blog.bdoughan.com/2010/07/xmladapter-jaxbs-secret-weapon.html。
import javax.xml.bind.annotation.XmlValue;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
public class MyMapEntryType {
@XmlAttribute
@XmlJavaTypeAdapter(DateAdapter.class)
public Date key;
public List<MyObject> value;
}