2012-08-09 11 views
30

मेरे आवश्यकता इस प्रकार है:कैसे यूआरएल अनुरोध में एक सरणी भेजने के लिए

मैं, अभिनेता नाम दे तिथि, समाप्ति तिथि शुरू करने और सभी फिल्मों वह उस अवधि में काम किया प्राप्त करना चाहते हैं।

इसी कारण से, मेरा सेवा अनुरोध इस तरह है।

http://localhost:8080/MovieDB/GetJson?name=Actor&startDate=20120101&endDate=20120505 

अब, मैं इसे सुधारना चाहता हूं। मैं एक प्रारंभ तिथि, समाप्ति तिथि और एक से अधिक अभिनेता नाम देना चाहता हूं और उस अवधि में उन सभी अभिनेताओं की फिल्मों को देखना चाहता हूं।

मुझे यकीन नहीं है कि मेरा यूआरएल ऐसी चीज़ का समर्थन कैसे करना चाहिए।

मैं वसंत का उपयोग कर जावा आधारित वेब सेवा लिख ​​रहा हूं।

कोड नीचे एक अभिनेता

@RequestMapping(value = "/GetJson", method = RequestMethod.GET) 
    public void getJson(@RequestParam("name") String ticker, @RequestParam("startDate") String startDate, @RequestParam("endDate") String endDate) { 
    //code to get results from db for those params. 
} 

एक समाधान मैं सोच रहा हूँ एक% प्रतीक उपयोग कर रहा है अभिनेता के नाम अलग करने के समर्थन करने के लिए है। उदाहरण के लिए:

http://localhost:8080/MovieDB/GetJson?name=Actor1%Actor2%Actor3&startDate=20120101&endDate=20120505 

अब, नियंत्रक में मैं नाम स्ट्रिंग को% के साथ पार्स कर दूंगा और सभी कलाकारों के नाम वापस प्राप्त करूंगा।

क्या यह करने का यह एक अच्छा तरीका है या क्या कोई मानक दृष्टिकोण है?

धन्यवाद

+1

मुझे लगता है कि यह 3 या 4 कलाकारों के लिए ठीक है। लेकिन अगर आप 100 कलाकारों में पास करना चाहते हैं, तो शायद आप POST का उपयोग कर सकते हैं और फिर जावास्क्रिप्ट ऑब्जेक्ट पास कर सकते हैं। ऑब्जेक्ट में प्रत्येक अभिनेता के लिए नाम-मूल्य जोड़े हो सकते हैं। तुम क्या सोचते हो? एक स्केची उत्तर के लिए खेद है – Victor

+0

मुझे समझ में नहीं आया कि पोस्ट का उपयोग करके आपका क्या मतलब है। क्या आप मुझे एक उदाहरण के लिए इंगित कर सकते हैं। धन्यवाद – javaMan

उत्तर

77

अलग अल्पविराम के साथ:

http://localhost:8080/MovieDB/GetJson?name=Actor1,Actor2,Actor3&startDate=20120101&endDate=20120505 

या:

http://localhost:8080/MovieDB/GetJson?name=Actor1&name=Actor2&name=Actor3&startDate=20120101&endDate=20120505 

या:

http://localhost:8080/MovieDB/GetJson?name[0]=Actor1&name[1]=Actor2&name[2]=Actor3&startDate=20120101&endDate=20120505 

किसी भी तरह से, अपने विधि हस्ताक्षर होने की जरूरत है:

012,
@RequestMapping(value = "/GetJson", method = RequestMethod.GET) 
public void getJson(@RequestParam("name") String[] ticker, @RequestParam("startDate") String startDate, @RequestParam("endDate") String endDate) { 
    //code to get results from db for those params. 
} 
+1

लेकिन यदि आपके पास 1000 आकार का सरणी है तो आप इसे सब कुछ अलग नहीं लिख सकते हैं .. ?? – Krishna

+4

क्या कोई "स्प्रिंग प्रलेखन" लिंक है जो आप यूआरएल लिखने के उन 3 अलग-अलग तरीकों से संबंधित हो सकते हैं? – TPPZ

+5

एक दृष्टिकोण (अल्पविराम से अलग) दूसरे दो से अलग है। जावा ऐप (उपरोक्त द्वारा समर्थित सर्वर पक्ष) पर प्रयास किया गया है, यदि आप 'name = Actor1, Actor2, Actor3' पास करते हैं, तो सर्वर को आपके 'नाम' पैरामीटर के लिए कोई सरणी नहीं मिलेगी, इसके बजाय आपको एक सिंगल स्ट्रिंग मिल जाएगी:' Actor1, अभिनेता 2, अभिनेता 3 'परम। अन्य दो अलग हैं, वे सभी मूल्यों की सरणी के साथ 'नाम' पैरामीटर देते हैं: '[" अभिनेता 1 "," अभिनेता 2 "," अभिनेता 3 "]'। Http://stackoverflow.com/questions/6243051/how-to-pass-an-array-within-a-query-string के अनुसार, कई अन्य ढांचे भी एक को एक स्ट्रिंग क्वेरी पैरा के रूप में सरणी के बजाय इलाज करते हैं –

संबंधित मुद्दे