springmvc 傳遞對象數組參數 property path is neither an array nor a List nor a Map


Spring MVC 3: Property referenced in indexed property path is neither an array nor a List nor a Map

 
JQuery's $.ajax does an excellent job mapping a json object to parameters, but when you start getting into more complex objects Spring MVC doesn't know how to interpret it sometimes.

For example if you have a json object like:

{
   "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....

 

}

注意到,ajax中提交的參數beans與Role類中的屬性beans必需一致。

JQuery will map your parameters like 

beans[0][agreementId]:1
beans[0][answerId]:2

The problem is that Spring MVC is expecting a parameter format like 

beans[0].agreementId:1
beans[0].answerId:2

In order to get that you can do it in 1 of two ways. You can do the quick and dirty way, which changes the way you're building your json object. Or, the other way is to extend the jQuery plugin to build parameters differently. 

To change the javascript code was pretty simple and looked something like this 

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)

            }

        })

 
To modify the jquery plugin I would suggest taking a  look here.

And for reference here are the pojos I was mapping to.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM