我目前正在研究API控制器。该控制器应该能够捕获任何 - 未知 - 参数并将其放在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>
,因此应该进行转换。我也尝试手动将参数转换为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
从Map params
获取数组NameConfiguration.PARAM_NAME_CARDIDS
- 必须动态吗?
答案 0 :(得分:15)
当您请求Map
注释@RequestParam
时,Spring会创建一个包含所有请求参数名称/值对的映射。如果有两对具有相同名称,则只有一对可以在地图中。所以它基本上是Map<String, String>
您可以通过MultiValueMap
public String processGetRequest(@RequestParam MultiValueMap parameters) {
此地图基本上是Map<String, List<String>>
。因此,具有相同名称的参数将位于同一列表中。