【问题标题】:Jersey Marshall Map<Date,List>泽西马歇尔地图<日期,列表>
【发布时间】:2023-03-20 06:56:01
【问题描述】:

我开始了解 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 列表。地图按 desc 顺序排序。

为此,我实现了一个地图适配器(MapAdapter,遵循@Blaise Doughan 的教程,http://blog.bdoughan.com/2010/07/xmladapter-jaxbs-secret-weapon.html)。问题出在日期键上。我有一个错误:无法编组 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 可以将 Date 作为我的 TreeMap 的关键?

谢谢。

【问题讨论】:

    标签: date map jaxb jersey


    【解决方案1】:

    JAXB 支持将java.util.Date 编组/解组为标准 XML 模式类型:日期、时间、日期时间。您可以通过@XmlSchemaType 注解控制使用的类型。

    如果您的日期信息未表示为标准 XML 架构类型之一,您可以使用XmlAdapter,类似于我对类似问题使用以下答案的XmlAdapter

    如果您需要使用XmlAdapter 方法,则@XmlJavaTypeAdapter 注释将放置在表示Map 中条目的适配对象的Date 字段上。以下是根据我的博客显示的内容: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;
    
    }
    

    【讨论】:

    • 嗨,布莱斯,感谢您的回复。就我而言,我有一个 Map。日期和列表不是来自我可以添加适当注释的另一个类。那么是不是不可能注释该地图以适应日期和列表?
    • @Lahniep - 您正在使用地图的默认表示?另外您的日期信息是如何格式化的?
    • 是的 .. 它是一个 TreeMap 并且日期格式为 SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
    • 如果你所有的 Date 对象都是这样格式化的,你可以在包级别注册 XmlAdapter。这是一个示例:blog.bdoughan.com/2011/05/…
    • 我正在使用 Eclipse,并且在添加以下内容时出现错误“包注释必须在文件 package-info.java 中”:@XmlJavaTypeAdapters({@XmlJavaTypeAdapter(type=Date.class,value=DateAdapter. class)}) 在我的 java 文件的包声明之前。 ??
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-07
    • 2012-05-11
    • 2011-09-14
    • 1970-01-01
    • 2011-05-17
    • 1970-01-01
    相关资源
    最近更新 更多