Jersey如何注释java.sql.Timestamp对象

时间:2013-05-24 21:03:12

标签: java rest jaxb jersey

背景

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

我尝试了什么

  • 我创建了类适配器。
  

import java.sql.Date;

     

import java.sql.Timestamp;

     

import 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)
  public java.sql.Timestamp getEndDate(){

     

if(endDate == null)

     

retrieveInfo();

     

return endDate;

}

  

问题

我仍然得到这个例外

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

我也检查了This Thread,但是它正在谈论String to TimeStamp,而不是我的情况。

任何帮助都将不胜感激。

修改

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

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

2 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分: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;