web-dev-qa-db-ja.com

日付パラメーターを使用してURLからRestfulメソッドを消費するJava

私はこのような安らかなウェブサービスメソッドを持っています:

@GET
@Path("/generateInfo")
@Produces(MediaType.APPLICATION_JSON)
public String generateInfo(
        @QueryParam("a") String a,
        @QueryParam("b") String b, 
        @QueryParam("date") Date date) {
    // ...business code...
    return "hello world";
}

WebBrowserからそのメソッドを呼び出す方法を教えてください。問題はDate paramで、試してみると404が見つからないか500 内部サーバーエラー。

14
Sergio

日付をStringとして受け入れ、自分で解析することをお勧めします。そのようです:

@GET
@Path("/generateInfo")
@Produces(MediaType.APPLICATION_JSON)
public String generateInfo(
        @QueryParam("a") String a,
        @QueryParam("b") String b, 
        @QueryParam("date") String date) {

    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    Date dateObj = sdf.parse(date);

    return "hello world";
}

ブラウザを介してこのリクエストを行う方法は次のとおりです。

http://localhost/your_service/generateInfo?date=2013-02-14

日付を解析する際の考慮事項:

  • SimpleDateFormatは、さまざまな日付形式を解析することで非常に柔軟です。 日付のISO標準 文字列は次のとおりです:yyyy-MM-dd

  • Joda Java date API は、日付/時刻のより完全な実装として受け入れられ、 Javaのネイティブ日付APIよりも最適化されていると信じている人もいます 特に日付の解析に使用します。

  • 特にアプリケーションが異なるタイムゾーンで動作している場合は、多くの場合、日付をエポックタイムスタンプとして提供する方が適切です。ただし、エポックタイムスタンプを受け入れるときは、HTTPキャッシュの問題に注意する必要があります(たとえば、クライアントがエポックタイムスタンプを切り捨てていない場合、キャッシュミスが多く発生します)。フォーマットされた日付はHTTPキャッシュに簡単なので、 ISO-8601 を参照します。

14
pestrella

URLの日付の形式によって異なります。 この質問 によると、コンストラクタDate(String)が処理できるすべての形式が機能するはずです。日付の形式が異なり、変更できない場合は、ペストレッラのソリューションを使用して、日付を文字列として受け取り、自分で変換する必要があります。

0
Ridcully
@GET
@Path("/generateInfo")
@Produces(MediaType.APPLICATION_JSON)

public String generateInfo(
 @QueryParam("a") String a,   
 @QueryParam("b") String b, 
 @QueryParam("date") String str_date) {

 SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");

 Date date = df.parse(str_date);
 return "hello world";
}
0
Aman Sehgal