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)