【问题标题】:Spring MVC + RequestParam as Map + get URL array parameters not workingSpring MVC + RequestParam as Map + 获取 URL 数组参数不起作用
【发布时间】:2013-05-03 09:03:43
【问题描述】:

我目前正在开发 API 控制器。该控制器应该能够捕获任何 - unknown - 参数并将其放入Map 对象中。现在我正在使用这段代码来捕获所有参数并将它们放入Map

public String processGetRequest(final @RequestParam Map params)

现在我调用的url如下:

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));
    }
}

有人能告诉我如何使用NameConfiguration.PARAM_NAME_CARDIDSMap params 获取数组Card_IDS - 必须是动态的 - 吗?

【问题讨论】:

    标签: arrays list spring-mvc dynamic parameters


    【解决方案1】:

    当您请求带有@RequestParam 注释的Map 时,Spring 会创建一个包含所有请求参数名称/值对的映射。如果有两对同名,则地图中只能有一对。所以它本质上是一个Map&lt;String, String&gt;

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

    public String processGetRequest(@RequestParam MultiValueMap parameters) {
    

    这张地图本质上是Map&lt;String, List&lt;String&gt;&gt;。所以同名的参数会在同一个列表中。

    【讨论】:

      猜你喜欢
      • 2023-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-05
      • 2014-04-19
      • 2020-11-11
      相关资源
      最近更新 更多