7

我正在使用 Jersey (jax-rs) 来构建一个 REST 丰富的应用程序。

一切都很好,但我真的不明白如何为日期和数字配置 JSON 编组/解组选项。

我有一个用户类:

@XmlRootElement
public class User {
    private String username;
    private String password;
    private java.util.Date createdOn;

    // ... getters and setters
}

createdOn属性被序列化时,我得到一个这样的字符串:'2010-05-12T00:00:00+02:00',但我需要使用特定的日期模式来编组和解组日期。

有人知道该怎么做吗?

4

3 回答 3

16

你可以写一个 XmlAdapter:

您的特定 XmlAdapter 看起来像:

import java.util.Date;
import javax.xml.bind.annotation.adapters.XmlAdapter;

public class JsonDateAdapter extends XmlAdapter<String, Date> {

    @Override
    public Date unmarshal(String v) throws Exception {
        // TODO convert from your format
    }

    @Override
    public String marshal(Date v) throws Exception {
        // TODO convert to your format
    }

}

然后在您的日期属性上设置以下注释:

@XmlJavaTypeAdapter(JsonDateAdapter.class)
public getDate() {
   return date;
}
于 2010-07-12T20:20:17.557 回答
2

您得到的是日期 ISO 8601 格式,这是一种标准。Jersey 将在服务器上为您解析它。对于 javascript,这里是js date 的扩展来解析它。

更新链接已失效:尝试另一个解析器,请参阅Help parsing ISO 8601 date in Javascript

于 2010-06-16T11:33:40.357 回答
1

如果您不想使用适配器,或者您需要为不同的对象进行自定义编组并希望完全避免使用适配器,您还可以使用属性和 bean 模式:

private Date startDate;

@XmlTransient
public Date getStartDate() {
    return startDate;
}
public void setStartDate(Date startDate) {
    this.startDate = startDate;
}
@XmlElement public String getStrStartDate() {
    if (startDate == null) return null;
    return "the string"; // the date converted to the format of your choice with a DateFormatter";
}
public void setStrStartDate(String strStartDate) throws Exception {
    this.startDate = theDate; // the strStartDate converted to the a Date from the format of your choice with a DateFormatter;
}
于 2011-01-19T16:46:35.290 回答