我在控制器中有这个:
@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?
答案 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中,所有属性都将按预期显示。