Java Spring请求参数映射<;字符串,字符串>;
我的控制器中有:Java Spring请求参数映射<;字符串,字符串>;,java,spring,spring-mvc,Java,Spring,Spring Mvc,我的控制器中有: @RequestMapping(value = "/myUrl", method = RequestMethod.GET) public String myUrl(@RequestParam(value = "test") Map<String, String> test) { return test.toString(); } 但在日志中我发现了这个错误: org.springframework.web.bind.MissingServletReques
@RequestMapping(value = "/myUrl", method = RequestMethod.GET)
public String myUrl(@RequestParam(value = "test") Map<String, String> test)
{
return test.toString();
}
但在日志中我发现了这个错误:
org.springframework.web.bind.MissingServletRequestParameterException: Required Map parameter 'test' is not present
如何将
Map
传递给Spring?由于test[a]
和test[b]
是完全不相关的查询字符串参数,所以现在还不清楚您要做什么
只需删除@RequestParam
的值
属性,即可使映射
参数包含两个条目,如下所示
{test[b]=2, test[a]=1}
可能有点晚了,但是可以通过声明一个中间类来实现:
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;
}
}
然后使用如下请求URL:
在test.attrs map中,所有属性都将按预期显示。文档中说,
@RequestParam
应该指定一个参数名,否则将使用所有请求参数填充映射:事实上就是这样。我的目标是创建一个分别包含键a
和b
以及值1
和2
的地图。@stackular据我所知,这在默认情况下是不可能的。您需要编写并注册自己的HandlerMethodArgumentResolver
才能执行此操作。@这些键是随机的吗?如果不是,只需使用命令对象即可。是的,键是任意(“随机”)的。@stackula AFAIK然后需要编写自己的逻辑,将它们转换为映射(或理想的包装对象)。工作正常,谢谢
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;
}
}
@RequestMapping(value = "/myUrl", method = RequestMethod.GET)
public String myUrl(AttributeMap test)