我试图传递一张地图<字符串,字符串>使用@ModelAttribute表示法通过Ajax传递给Spring。 使用IntelliJ的REST客户端,我只需要添加" infos [KEY]"有价值的参数" VALUE"获取在hashmap中填充的相应键/值对。
我试图用JQuery重现相同的行为
function update()
{
$.ajax(
{
type: "PATCH",
url: "url",
dataType: "json",
data: {"infos[TheAnswer]": "42"},
success: function(data)
{
alert("OK");
}
});
}
但Spring控制器无法填充我的模型。 这是(但我不应该成为问题因为我说IntelliJ的REST客户端工作正常)
public class ExtraInfos implements Serializable
{
protected HashMap<String, String> infos = new HashMap<String, String>();
public HashMap<String, String> getInfos()
{
return infos;
}
public void setInfos(HashMap<String, String> infos)
{
this.infos = infos;
}
}
这是我的控制器方法:
@RequestMapping(value = "/{id}", method = RequestMethod.PATCH)
public
@ResponseBody
Contact updateContact(@PathVariable("id") Long id,
@ModelAttribute ExtraInfos infos)
{
return this.service.update(id, infos);
}
答案 0 :(得分:2)
字符串modelAttribute
没有按照发送方式接收数据(json对象)。
修改强>
最简单的方法应该是:
AJAX:
$.ajax(
{
type: "PATCH",
url: "url",
dataType: "json",
data: {TheAnswer: "42"},
success: function(data)
{
alert("OK");
}
});
控制器:
public @ResponseBody Contact updateContact(@PathVariable("id") Long id,
@RequestBody ExtraInfos infos){
}
答案 1 :(得分:-1)
好好使用这个控制器
//只是一个例子
@RequestMapping(value = "/test/{id}", method = RequestMethod.POST)
public @ResponseBody Integer extra(@PathVariable("id") Long id, @RequestBody ExtraInfos extraInfos){
System.out.println(id);
System.out.println(extraInfos.getInfos());
return 1;
}
这里的事情就像前面提到的那个你需要为ExtraInfos发送对象。
如果我们假设这是ExtraInfos的示例值
ExtraInfos = {infos:{"key":"value"}}
我们的mapper将使用它创建ExtraInfos对象。
执行此ajax调用(在本例中为此映射器)。
$.ajax({
url:"test/23123",
type:"post",
contentType: "application/json; charset=utf-8",
data:JSON.stringify(ExtraInfos)
})
控制台上的输出:
23123
{key=value}