【问题标题】:Jersey how to annotate java.sql.Timestamp objectJersey 如何注释 java.sql.Timestamp 对象
【发布时间】:2013-05-24 21:03:12
【问题描述】:

背景

我有一个根元素类,其中包含 java.sql.Timestamp 类的变量,我希望 JAXB 从该变量创建 xml 元素。

我的尝试

  • 我创建了类适配器。

导入 java.sql.Date;

导入 java.sql.Timestamp;

导入 javax.xml.bind.annotation.adapters.XmlAdapter;

public class TimestampAdapter extends XmlAdapter <Date, Timestamp> {
  public Date marshal(Timestamp v) {
      return new Date(v.getTime());
  }

  public Timestamp unmarshal(Date v) {
      return new Timestamp(v.getTime());
  }

}

  • 。然后我注释了获取该变量的函数:

@XmlJavaTypeAdapter(TimestampAdapter.class)
公共 java.sql.Timestamp getEndDate() {

如果(结束日期 == null)

检索信息();

返回结束日期;

}

问题

我仍然得到这个异常

java.sql.Date does not have a no-arg default constructor.

我也检查了This Thread,但它是在谈论字符串到时间戳,而不是我的情况。

任何帮助将不胜感激。

编辑

这个变量在OrderStatus类中,我像这样从OrderImpl类中调用它

@Override
    @XmlElement(name = "Status", type = OrderStatus.class)
    public OrderStatus getStatus() {
        return status;
    }

【问题讨论】:

  • jaxb unmarshal timestamp的可能重复
  • @BlaiseDoughan 不是重复的,请检查问题,是关于java.sql.date,而不是java.util.date

标签: java rest jaxb jersey


【解决方案1】:

您的XmlAdapter 应该将Timestamp 转换为/从java.util.Date 而不是java.sql.Date

【讨论】:

  • 感谢您的回答,我正在尝试。
  • 我没有收到异常,但在尝试调用该服务时我的浏览器中也没有得到任何结果。此外,当我尝试在本地调用该函数 public static voic main 时,我得到了正确的数据 (+1)。
  • 除了EndDate之外,我在浏览器中得到了班级中其他变量的结果,似乎这个方法本身没有被触发
  • 我在问题中添加了一些可能有用的信息。
  • @WilliamKinaan - 如果您尝试在 JAX-RS 之外使用独立的 JAXB 示例来测试您的映射会怎样。您可以在Unmarahaller 上设置ValidationEventHandler 以发现任何问题。
【解决方案2】:

您的适配器需要是这样的:

public class TimestampAdapter extends XmlAdapter<Date, Timestamp> {
      public Date marshal(Timestamp v) {
          return new Date(v.getTime());
      }
      public Timestamp unmarshal(Date v) {
          return new Timestamp(v.getTime());
      }
  }

@XmlJavaTypeAdapter( TimestampAdapter.class)
        public Timestamp done_date;

【讨论】:

  • 正如我在问题中提到的,我已经看到了这个答案,这不是我的情况,我得到了这个例外DateAdapter is not applicable to the field type java.sql.Timestamp.
  • 我已经尝试过您的解决方案,我在问题中提到了这一点。只是问题没有显示&lt;Date, Timestamp&gt;,现在我编辑一下
  • 对不起,我应该说清楚的。我认为问题在于您没有提到要转换的类型。我在回答中添加了这一点
  • 感谢您的努力,+1
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-10-13
  • 2014-12-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多