Spring MVC的+ RequestParam为地图+获取URL参数数组不工作(Spring M

2019-09-01 20:40发布

我目前工作的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

Answer 1:

当您请求Map带注释@RequestParam春天创建一个包含所有请求参数的名称/值对的映射。 如果有两对具有相同的名称,那么只有一个可以在地图上。 因此,它本质上是一个Map<String, String>

您可以通过访问所有参数MultiValueMap

public String processGetRequest(@RequestParam MultiValueMap parameters) {

这个地图基本上是一个Map<String, List<String>> 。 因此,具有相同名称的参数将在同一个列表。



文章来源: Spring MVC + RequestParam as Map + get URL array parameters not working