2013-05-03 5 views
7

मैं वर्तमान में एक एपीआई नियंत्रक पर काम कर रहा हूं। यह नियंत्रक किसी भी पकड़ने में सक्षम होना चाहिए - अज्ञात - पैरामीटर और इसे Map ऑब्जेक्ट में रखें। अब मैं सभी मापदंडों को पकड़ने और उन्हें एक Mapस्प्रिंग एमवीसी + अनुरोधपाराम मानचित्र के रूप में + यूआरएल सरणी पैरामीटर काम नहीं कर रहे हैं

public String processGetRequest(final @RequestParam Map params) 

में डालने के लिए इस कोड का उपयोग कर रहा हूँ अब यूआरएल मैं फोन इस प्रकार है:

server/api.json?action=doSaveDeck&Card_IDS[]=1&Card_IDS[]=2&Card_IDS[]=3 

तब मैं मानकों प्रिंट आउट, डीबगिंग उद्देश्यों के लिए , कोड के इस टुकड़े के साथ:

if (logger.isDebugEnabled()) { 
    for (Object objKey : params.keySet()) { 
     logger.debug(objKey.toString() + ": " + params.get(objKey)); 
    } 
} 

कि का परिणाम है:

10:43:01,224 DEBUG ApiRequests:79 - action: doSaveDeck 
10:43:01,226 DEBUG ApiRequests:79 - Card_IDS[]: 1 

लेकिन अपेक्षित परिणाम होना चाहिए कुछ की तरह:

10:43:XX DEBUG ApiRequests:79 - action: doSaveDeck 
10:43:XX DEBUG ApiRequests:79 - Card_IDS[]: 1 
10:43:XX DEBUG ApiRequests:79 - Card_IDS[]: 2 
10:43:XX DEBUG ApiRequests:79 - Card_IDS[]: 3 

या कम से कम मुझे बताया कि Card_IDS एक String[]/List<String> है और इसलिए casted किया जाना चाहिए। NameConfiguration.PARAM_NAME_CARDIDS का उपयोग करके Map params से - - यह गतिशील होना चाहिए

for (Object objKey : params.keySet()) { 
    if(objKey.equals(NameConfiguration.PARAM_NAME_CARDIDS)){ //Never reaches this part 
     List<String> ids = (List<String>)params.get(objKey); 

     for(String id : ids){ 
      logger.debug("Card: " + id); 
     } 
    } else { 
     logger.debug(objKey + ": " + params.get(objKey)); 
    } 
} 

कोई मुझे बताओ कि सरणी प्राप्त करने के लिए Card_IDS किया जा सका: मैं भी एक List<String> मैन्युअल लेकिन है कि या तो काम नहीं करता है करने के लिए पैरामीटर कास्टिंग की कोशिश की?

उत्तर

15

जब आप @RequestParam के साथ एनोटेटेड अनुरोध करते हैं तो वसंत एक मानचित्र बनाता है जिसमें सभी अनुरोध पैरामीटर नाम/मान जोड़े होते हैं। यदि एक ही नाम के साथ दो जोड़े हैं, तो मानचित्र में केवल एक ही हो सकता है। तो यह अनिवार्य रूप से एक Map<String, String>

है आप एक MultiValueMap के माध्यम से सभी मापदंडों का उपयोग कर सकते हैं:

public String processGetRequest(@RequestParam MultiValueMap parameters) { 

इस नक्शे अनिवार्य रूप से एक Map<String, List<String>> है। तो एक ही नाम के पैरामीटर एक ही सूची में होंगे।

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