微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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">

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

原文地址:https://www.jb51.cc/springmvc/159957.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐