泽西马歇尔地图<日期,列表> </date,list>

时间:2012-01-17 10:02:35

标签: date map jaxb jersey

我开始了解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的关键字来进行调整?

感谢。

1 个答案:

答案 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;

}