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

取得するのは、標準である日付ISO8601形式です。ジャージーはサーバー上でそれを解析します。javascriptの場合、これを解析するためのjsdateの拡張機能があります。

リンクの更新が無効です:別のパーサーを試してください。JavascriptでISO8601の日付を解析するためのヘルプを参照してください。

于 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 に答える