2013-02-14 28 views
13

我有這樣一個RESTful Web服務的方法:消耗RESTful方法從URL與Date參數的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"; 
} 

我如何調用該方法從web瀏覽器?問題是Date PARAM,當我嘗試給我404未找到或500內部服務器錯誤。

+0

會通過毫秒工作嗎? – 2015-07-08 05:24:12

回答

14

我建議接受日期爲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"; 
}

使通過瀏覽器這一要求的方法是:

  • SimpleDateFormat是非常靈活的解析不同日期:

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

    事情解析日期時要考慮格式。該ISO standard for date字符串是:yyyy-MM-dd

  • Joda Java date API被接受爲一個更完整的實現的日期/時間,並some believe that it is more optimised than Java's native date API特別是對於解析日期。

  • 將日期提供爲時代時間戳通常會更好,尤其是如果您的應用程序在不同的時區內運行時更是如此。但是,在接受新紀元時間戳時(例如,如果客戶端不截斷曆元時間戳,那麼您將獲得大量緩存未命中時),您必須瞭解HTTP緩存問題。我會參考ISO-8601,因爲格式化日期對於HTTP緩存更容易。

+1

這是恕我直言的首選方式。你的JSON編組很可能會將Date類分解到它的字段中,所以你最終會在你的JSON中使用一個Date對象,而不是一個整潔的String。 – Nicholas 2013-02-14 17:10:17

0

這取決於URL中日期的格式。 根據this question,構造函數Date(String)可以處理的任何格式都應該有效。如果您的日期格式不同並且無法更改,則必須使用pestrella的解決方案並將日期作爲字符串接收並自行轉換。

0
@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"; 
} 
+4

這是接受答案的精確副本,僅對變量名稱進行了輕微更改。 – JJJ 2017-03-28 11:25:46