ajax – 将Map传递给springMVC控制器

前端之家收集整理的这篇文章主要介绍了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.f2er.com/springmvc/159957.html

猜你在找的SpringMVC相关文章