ajax – 将Map传递给springMVC控制器

我试图从ajax发送HashMap或任何其他Map实现到 Spring MVC控制器

这是我如何做的细节:

Ajax调用如下

var tags = {};
tags["foo"] = "bar";
tags["whee"] = "whizzz";


$.post("doTestMap.do",{"tags" : tags },function(data,textStatus,jqXHR) {
if (textStatus == 'success') {
    //handle success
    console.log("doTest returned " + data);
} else {
    console.err("doTest returned " + data);
}
});

然后在控制器方面我有

@RequestMapping(value="/publisher/doTestMap.do",method=RequestMethod.POST)
public @ResponseBody String doTestMap(@RequestParam(value = "tags",defaultValue = "") HashMap<String,String> tags,HttpServletRequest request) {  //

    System.out.println(tags);

    return "cool";
}

不幸的是我系统地得到了

org.springframework.beans.ConversionNotSupportedException: Failed to convert value of type 'java.lang.String' to required type 'java.util.Map'; nested exception is java.lang.IllegalStateException: Cannot convert value of type [java.lang.String] to required type [java.util.Map]: no matching editors or conversion strategy found

我究竟做错了什么 ?

谢谢.

在弹簧控制器中绑定地图的方式与绑定数组的方式相同.无需特殊转换器!

但有一点要记住:

> Spring使用命令对象作为顶级值持有者.命令对象可以是任何类.

所以你需要的是一个包装类(TagsWrapper),它包含一个Map< String,String>类型的字段.叫做标签.
绑定数组的方法相同.

这在文档中得到了很好的解释,但我偶尔忘记了包装器对象的需要;)

您需要更改的第二件事是提交标记值的方式:

>每个地图键使用一个表单参数,而不是完整映射的完整字符串表示.
>一个输入值应如下所示:

<input type="text" name="tags[key]" value="something">

如果标签是包装器中的映射,则这样就可以开箱即用于表单提交.

相关文章

SpringMVC1.MVC架构MVC是模型(Model)、视图(View)、控制...
SpringMVC学习笔记1.SpringMVC应用1.1SpringMVC简介​Spring...
11.1数据回显基本用法数据回显就是当用户数据提交失败时,自...
一、SpringMVC简介1、SpringMVC中重要组件DispatcherServlet...
1.它们主要负责的模块Spring主要应用于业务逻辑层。SpringMV...
3.注解开发Springmvc1.使用注解开发要注意开启注解支持,2.注...