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

xiaoxiao2021-02-28  14

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 ,本文对英文部分进行了适当的翻译。

转载请注明原文地址: https://www.6miu.com/read-1700126.html

最新回复(0)