Spring MVC + RequestParam as Map +获取URL数组参数不起作用

Jaa*_*ans 7 arrays parameters list dynamic spring-mvc

我目前正在研究API控制器.该控制器应该能够捕获任何 - 未知 - 参数并将其放入Map对象中.现在我正在使用此代码来捕获所有参数并将它们放入Map

public String processGetRequest(final @RequestParam Map params)
Run Code Online (Sandbox Code Playgroud)

现在我打电话的网址如下:

server/api.json?action=doSaveDeck&Card_IDS[]=1&Card_IDS[]=2&Card_IDS[]=3
Run Code Online (Sandbox Code Playgroud)

然后我用这段代码打印出参数,用于调试目的:

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

结果是:

10:43:01,224 DEBUG ApiRequests:79 - action: doSaveDeck
10:43:01,226 DEBUG ApiRequests:79 - Card_IDS[]: 1
Run Code Online (Sandbox Code Playgroud)

但预期的结果应该是这样的:

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
Run Code Online (Sandbox Code Playgroud)

或至少告诉我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));
    }
}
Run Code Online (Sandbox Code Playgroud)

有人可以告诉我如何获取数组Card_IDS- 它必须是动态的 - 从Map params使用NameConfiguration.PARAM_NAME_CARDIDS

a b*_*ver 15

当您请求Map使用@RequestParamSpring 注释时,会创建一个包含所有请求参数名称/值对的映射.如果有两对具有相同名称,则只有一对可以在地图中.所以它基本上是一个Map<String, String>

您可以通过以下方式访问所有参数MultiValueMap:

public String processGetRequest(@RequestParam MultiValueMap parameters) {
Run Code Online (Sandbox Code Playgroud)

这张地图基本上是一张Map<String, List<String>>.因此,具有相同名称的参数将位于同一列表中.