Spring RequestParam Map <string,string =“”> </string,>

时间:2014-02-27 15:53:39

标签: java spring spring-mvc

我在控制器中有这个:

@RequestMapping(value = "/myUrl", method = RequestMethod.GET)
public String myUrl(@RequestParam(value = "test") Map<String, String> test)
{
    return test.toString();
}

我正在发出此HTTP请求:

GET http://localhost:8080/myUrl?test[a]=1&test[b]=2

但是在日志中我收到了这个错误:

org.springframework.web.bind.MissingServletRequestParameterException: Required Map parameter 'test' is not present

如何将Map<String, String>传递给Spring?

2 个答案:

答案 0 :(得分:2)

由于test[a]test[b]完全不相关的查询字符串参数,因此无法立即清楚您要执行的操作。

您只需移除value的{​​{1}}属性即可让@RequestParam参数包含两个条目,例如

Map

答案 1 :(得分:2)

可能有点晚了,但可以通过宣布一个中间阶段来实现这一点:

public static class AttributeMap {
    private Map<String, String> attrs;

    public Map<String, String> getAttrs() {
        return attrs;
    }

    public void setAttrs(Map<String, String> attrs) {
        this.attrs = attrs;
    }
}

在方法声明中使用它作为参数类型(没有@RequestParam):

@RequestMapping(value = "/myUrl", method = RequestMethod.GET)
public String myUrl(AttributeMap test)

然后使用这样的请求URL: http://localhost:8080/myUrl?attrs[1]=b&attrs[222]=aaa

在test.attrs map中,所有属性都将按预期显示。