2016-10-07 11 views
1

私はjavaee-api 6.0を使用しています。javax.ws.rs.core.Response.ResponseBuilderはjava.util.Dateを数値として生成します

私は、更新と呼ばれるjava.util.Dateフィールドを持つエンティティBeanを持っています。

public class Tariff implements Serializable { 
    private Date updated 

そして、私はRESTサービスを持っています。

@GET 
@Path("/example") 
public Response getTariff() { 
    return Response.status(200).entity(new Records(createExampleTariff())).build(); 
} 

私はRESTサービスを呼び出すと、日付として数値を返します。

{"records":{"description":"OTHER","message":"Nothing to say","status":"OK", "updated":1475822878961},"status":"ok"} 

DTOを使用せずにどのように私がこれを過ぎて行うことができるかを知ってください。

+0

日付は常に、1970年1月1日からのミリ秒数としてこのDateオブジェクトによって表さ00:00:00 GMTに保存され得ることができます。 –

+0

こんにちは、あなたは本当に人間が読める形式で日付を返す必要がありますか?長い日付で作業する方が簡単です。 – Laazo

答えて

2

理由:

The date is always stored as the number of milliseconds since January 1, 1970, 00:00:00 GMT represented by this Date object.

ソリューション:

あなたは、日付のフォーマットを変換することができますを使用して。その変換ロジックを持つJsonDateSerializerクラスを作成します。

@JsonSerialize(using=JsonDateSerializer.class) 
public Date getDate() { 
    return date; 
} 

あなたは詳細な説明here

+0

読み物がうまくいきましたが、ポストして更新しようとすると、String value '2016-10-07 09:16:51'からjava.util.Dateのインスタンスを構築できません:有効な表現ではありません(エラー:日付 "2016-10-07 09:16:51"を解析できません:標準形式( "yyyy-MM-dd'T'HH:mm:ss.SSSZ"、 "yyyy-MM- – javapenguin

+0

変換では、論理を作成して日付を作成できます。どんな質問形式でも。例えば"yyyy-MM-dd'T'HH:mm:ss.SSSZ"、 "yyyy-MM-dd'T'HH:mm:ss.SSS'Z '"、 "EEE、dd MMM yyyy HH:mm:ss "MM-dd-yyyy" dateformatを使用する代わりにJsonDateSerializerで –

+0

を「zzz」、「yyyy-MM-dd」 –

0

実際には、Dateクラスは数値のラッパーで、「エポック」と呼ばれる標準基本時間(1970年1月1日00:00:00 GMT)から指定されたミリ秒数です。 「これを過ぎて作業する」という意味を指定する必要があります。あなたは数字か文字列を送ります。文字列の場合、SimpleDateFormatを使用して必要な文字列を生成できます。

0

私はタイムスタンプを保持しているので、簡単なままです。人間が読める形式で日付を送信する必要がある場合は、org.codehaus.jackson.map.JsonSerializerを継承し、必要に応じてserializeメソッドを実装するクラスを作成できます。そして、より多くの情報のため、この

@JsonSerialize(using=JsonDateSerializer.class) 
public Date getDate() { 
    return date; 
} 

チェックthis articleような日付ゲッターをanotate

関連する問題