ajax模仿表单提交list集合类型数据,错误:property path is neither an array nor a List nor a Map

我的controller接收的是一个对象,对象中有一个list集合,集合中放的是另一个对象,

@ResponseBody
    public DWZResult testCardSave(Model model,Bean1 b) {
    ...
}

Model如下:

public class Bean1{
private Long id;
private List<Bean2> beanlist = new ArrayList<>();
...
}
public class Bean2{
private Long id;
private String expResultDesc;
private String expAnnexId;
private Integer judge;
...
}

正常表单按钮提交时参数是这样的:
在这里插入图片描述
因为要用Ajax提交,要自定义表单数据,刚开始这样写的:

var bean = [{
            id: $td.eq(11).find("input").val(),
            expResultDesc: $td.eq(8).find("textarea").val(),
            expAnnexId: $td.eq(9).find("input.annexUploader").val(),
            judge: $td.eq(10).find("select").val()
        }];
var data = {
                id: '${bean.id!}',
                beanlist: bean
            }
$.ajax({
                type: 'POST',
                url: $form.attr("action"),
                data: data,
                dataType: "json",
                cache: false,
                success: function (json) {
                ...
                },
                error: function () {
                ...
                }
            });

然后就操作失败(Property referenced in indexed property path 'beanlist[0][expAnnexId]' is neither an array nor a List nor a Map;),查看表单数据是这样的,感觉很接近,但又很遥远:
在这里插入图片描述
问了前端大神,直接这样写就好了:

var data = {};
data['id'] = '${bean.id!}';
data['beanlist[0].id'] = $td.eq(11).find("input").val();
data['beanlist[0].expResultDesc'] = $td.eq(8).find("textarea").val();
data['beanlist[0].expAnnexId'] =  $td.eq(9).find("input.annexUploader").val();
data['beanlist[0].judge'] = $td.eq(10).find("select").val();

然后就和按钮提交一样了。


版权声明:本文为liyaowen505原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。