2013-05-03 108 views
7

我目前正在使用API​​控制器。該控制器應該能夠捕獲任何 - 未知的 - 參數並將其放入Map對象中。現在,我使用這個代碼來捕獲的所有參數,並把它們放在一個MapSpring MVC + RequestParam爲Map +獲取URL數組參數不起作用

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>,因此應被鑄造。我也試過參數鑄造手動一個List<String>但是,這並不工作,要麼:

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 - 通過使用NameConfiguration.PARAM_NAME_CARDIDSMap params - 它必須是動態

回答

15

當您請求Map註解@RequestParam Spring創建一個包含所有請求參數名稱/值對的映射。如果有兩個同名的對,那麼只有一個可以在地圖中。因此,它本質上是一個Map<String, String>

您可以通過訪問MultiValueMap所有參數

public String processGetRequest(@RequestParam MultiValueMap parameters) { 

這個地圖基本上是一個Map<String, List<String>>。因此具有相同名稱的參數將在同一個列表中。