Spring MVC : Property referenced in indexed property path is neither an array nor a List nor a Map
JQuery的$.ajax在将json对象映射到参数方面做得非常出色,但是当你开始尝试传输更复杂的对象时(比如对象里包含对象),Spring MVC并不知道如何解释它。
例如,如果你有一个像这样的json对象:
{
"beans":[
{
"agreemendId":1,
"answerId":2
}
]
}
SpringMVC中的接收参数如下:
@ResponseBody
public Result update(@ModelAttribute Role dataList) {...}
其中,Role,Bean的定义:
public class Role{
List<Bean> beans;
public List<Bean> getBeans(){ return beans;}
public void setBeans(List<Bean> beans){this.beans=beans;}
}
public class Bean{
private Integer agreemendId;
private Integer answerId;
set....
get....
}
JQuery 会将你的参数映射成这样:
beans[0][agreementId]=1
beans[0][answerId]=2
问题是Spring MVC需要这种的参数格式:
beans[0].agreementId=1
beans[0].answerId=2
一种就是使用简单粗暴的手段,修改你建立JSON对象的代码。另一种方法是扩展jQuery插件以不同的方式构建参数。
改变javascript代码非常简单,看起来像这样:
var answers = {};
answers['beans[' + index +'].agreementId'] = agreementId;
answers['beans[' + index +'].answerId'] = value;
$.ajax({
url:url,
data: answers ,
dataType:'json',
type:'post',
success:function(data){
console.log(data);
}
});
要使用jquery插件进行修改,建议看看这里。
-----------------------------------------------------------------------------
上文转载自 https://www.cnblogs.com/pautcher/p/6075422.html ,本文对英文部分进行了适当的翻译。