2013-02-14 79 views
13

मैं इस तरह एक आरामदायक वेब सेवा विधि है:तिथि परम जावा के साथ URL से शोकहारा विधि सेवन

@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 परम वह यह है कि जब मैं कोशिश करें मुझे 404 नहीं मिला है या 500 आंतरिक सर्वर त्रुटि दे रहा है।

+0

मिलीसेकंड काम कर रहे हैं? –

उत्तर

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 तार है: some believe that it is more optimised than Java's native date APIyyyy-MM-dd

  • Joda Java date API दिनांक/समय का अधिक पूर्ण कार्यान्वयन के रूप में स्वीकार किया जाता है, और विशेष रूप दिनांकों पार्स करने के लिए।

  • अक्सर युग टाइमस्टैम्प के रूप में तिथियां प्रदान करना बेहतर होता है, खासकर यदि आपका एप्लिकेशन अलग-अलग टाइमज़ोन पर काम करता है। हालांकि, आपको इकोच टाइमस्टैम्प को स्वीकार करते समय HTTP कैशिंग मुद्दों के बारे में अवगत होना चाहिए (उदाहरण के लिए यदि आपके क्लाइंट युग टाइमस्टैम्प को छोटा नहीं कर रहे हैं तो आपको बहुत सारे कैश मिस मिलेगा)। मैं ISO-8601 पर वापस संदर्भित करता हूं क्योंकि प्रारूपित दिनांक HTTP कैश के लिए आसान हैं।

+1

यह आईएमएचओ पसंदीदा तरीका है। आपका JSON मार्शलर सबसे अधिक संभावना 'डेट' क्लास को अपने फ़ील्ड में तोड़ देगा, इसलिए आप अपने JSON में ऑब्जेक्ट' डेट' के साथ समाप्त हो जाएंगे, बल्कि एक साफ 'स्ट्रिंग'। – Nicholas

0

यह यूआरएल की तारीख के प्रारूप पर निर्भर करता है। this question के अनुसार, कोई भी प्रारूप जो निर्माता Date(String) संभाल सकता है, काम करना चाहिए। यदि आपका दिनांक प्रारूप अलग है और आप इसे बदल नहीं सकते हैं, तो आपको पेस्ट्रेला के समाधान के साथ जाना होगा और तारीख को स्ट्रिंग के रूप में प्राप्त करना होगा और इसे स्वयं परिवर्तित करना होगा।

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