springmvc 传递复杂对象参数报 property path is neither an array nor a List nor a Map

来源:互联网 发布:vb编程界面 编辑:程序博客网 时间:2024/06/15 21:54

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中的接收参数如下:


@ResponseBodypublic 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]=1beans[0][answerId]=2


问题是Spring MVC需要这种的参数格式:

beans[0].agreementId=1beans[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 ,本文对英文部分进行了适当的翻译。




阅读全文
0 0
原创粉丝点击