加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ajax – 将Map传递给springMVC控制器

发布时间:2020-12-16 01:37:08 所属栏目:百科 来源:网络整理
导读:我试图从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
我试图从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">

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读