var list=[]; list.push({ "id":1, "type":2, }); list.push({ "id":2, "type":3, });
this.$http.post("/demo/testListParam",{"jsonStr":JSON.stringify(list),"id":parseInt(this.id),"reason":this.reason} , { }).then(res => { if (res.resultCode == 200 ) { console.log("data:"+res.data); } else { setTimeout(() => { this.instance("error", "提示", res.message); }, 500); } });
2、controller
通过String拿到json字符串,再将json字符串转为List.
StAdjust类有字段id、reason

@RequestMapping(value = "/demo/testListParam", method = RequestMethod.POST)
var taskList = ["123","456"]; var params = { taskList: taskList }; $.ajax({ type: "PUT", dataType: "json", url: "/client/update", data: params, success: function (msg) { } });
1 @RequestMapping(value = "/update", method = RequestMethod.PUT) 2 @ResponseBody 3 public JSONResult updateClient(Client client, @RequestParam(value = "taskList[]") List<String> taskList) { 4 logger.debug("Yufan taskList={}", taskList); 5 return JSONResult.ok(); 6 }
发送的参数Json数据:
{"id":1, "shiftDetails":[{"id":1,"lineId":2}], "broadcasts":[{"id":1,"lineId":1,"imgPath":"TEST1"}, {"id":2,"lineId":2,"imgPath":"TEST2"}] }
Controller类:
@Controller @RequestMapping("/travelLine") public class TravelLineController { @RequestMapping("/insertTest") @ResponseBody public Json insertTest(@RequestBody TravelLineDomain tl) { Json j = new Json(); j.setData(tl); return j; } }
TravelLineDomain实体类:
@Table(name = "t_travel_line") public class TravelLineDomain{ @Id @GeneratedValue(generator = "JDBC") private Integer id; private List<ShiftDetailDomain> shiftDetails; private List<BroadcastDomain> Broadcasts; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public List<ShiftDetailDomain> getShiftDetails() { return shiftDetails; } public void setShiftDetails(List<ShiftDetailDomain> shiftDetails) { this.shiftDetails = shiftDetails; } public List<BroadcastDomain> getBroadcasts() { return Broadcasts; } public void setBroadcasts(List<BroadcastDomain> broadcasts) { Broadcasts = broadcasts; } }
springMVC通过ajax传递参数list对象或传递数组对象到后台
前台使用ajax
后台使用springMVC
传递的参数是N多个对象
而文件上传服务器需要特殊处理,普通的post请求(Content-Type不是application/x-www-form-urlencoded)数据格式不固定,不一定是名值对的方式,所以服务器无法知道具体的处理方式,所以只能通过获取原始数据流的方式来进行解析。
---------------------
jsp文件: $("#saveuddd").click(function(){ var saveDataAry=[]; var data1={"name":"test","password":"gz"}; var data2={"name":"ququ","password":"gr"}; saveDataAry.push(data1); saveDataAry.push(data2); $.ajax({ type:"POST", url: basePath + "/user/saveUser", dataType:"json", contentType:"application/json", // 指定这个协议很重要 data:JSON.stringify(saveDataAry), //只有这一个参数,json格式,后台解析为实体,后台可以直接用 success:function(data){ //do something } }) }); java文件 @RequestMapping(value = "saveUser", method = {RequestMethod.POST }) @ResponseBody //此时的user是map数据,并没有解析为bean 不建议使用 public void savu(User[] users){ System.out.println(users) ; } 使用如下方法,可以使用bean @RequestMapping(value = "saveUser", method = {RequestMethod.POST }) @ResponseBody public void saveu( @RequestBody User[] users ){ System.out.println(users.getName()) ; // 此时的user是实体bean } ---------------------
jsp同上 另外一种: @RequestMapping(value = "saveUser", method = {RequestMethod.POST }) @ResponseBody public void saveu( @RequestBody List<Map<String,String>> users ){ // spring MVC只能解析外层的json格式,内部的bean转化为Map格式的键值对,需要对map解析 List<User> userList = new ArrayList<User>(); for(Map<String,String> map : users){ User u = new User(); u.setName(map.get("name")); u.setPassword(map.get("password")); userList.add(u); } // ---------------------
第三种方式
能够传递多个参数,但是每一个参数都是字符串(bean类型的数据会转化为JSON格式的字符串)
jsp文件 $("#saveuddd").click(function(){ var saveDataAry=[]; var data1={"name":"test","password":"gz"}; var data2={"name":"ququ","password":"gr"}; saveDataAry.push(data1); saveDataAry.push(data2); $.ajax({ type:"POST", url: basePath + "/user/saveUser", dataType:"json", data:{users:JSON.stringify(saveDataAry),aa:"ddd"}, //可以传递多个参数 //此时的users内容与另外一个参数:aa 的内容一起传递,所以后台解析为字符串 //后台接收的users内容:[{"name":"test","password":"gz"},{"name":"ququ","password":"gr"}] //后台接收的 aa 内容:"ddd" success:function(data){ // do something } }) }); java文件 @RequestMapping(value = "saveUser", method = {RequestMethod.POST}) @ResponseBody public void saveu( String users , String aa ){ System.out.println(users) ; } ---------------------
=========================================================================================
js前端ajax提交list集合参数至后端
方法一
var orderNosList = new Array(); var rows = $("#dg_linkOrder").datagrid("getChecked"); if(rows.length < 1){ $('#error').dialog('open').dialog('center').dialog('setTitle', '错误提示'); $('#error').text("请选择一条数据"); }else { for (var i = 0; i < rows.length; i++) { orderNosList[i] = rows[i].orderNo; } var params = { reserveOrderNoList:orderNosList }; $.ajax({ url : api.LINK_ORDER_RESERVE_RETRY, data : JSON.stringify(params), type : 'POST', contentType: "application/json", dataType : 'json', success : function(res) { var str = ''; $(res.reserveFlowList).each(function(i, obj){ var responseCode = obj.responseCode; var orderNo = obj.reserveFlow.orderNo; if (responseCode == 0) { str += "订单号为"+ orderNo +"成功<br/>"; } else { str += "订单号为"+ orderNo + obj.responseMsg +"<br/>" } }); $('#error2').dialog('open').dialog('center').dialog('setTitle', '提示'); $('#error2').html(str); // 刷新列表 linkOrder.unfresh_LinkOrder(); } }); }
@RequestMapping("/http/pss/reserveOrderRetry") @ResponseBody public Object reserveOrderRetry(@RequestParam("reserveOrderNoList")List<String> reserveOrderNoList) { return service.reserveOrderRetry(reserveOrderNoList); }
方法二
var demo = new Object(); demo.name="1"; demo.id="2"; var demo2 = new Object(); demo2.name="1"; demo2.id="2"; var conditons = []; conditons.push(demo); conditons.push(demo2); $(function(){ $.ajax({ type:'post', url:'/http/pss/demo', contentType: "application/json", data:{name:"123",conditions:JSON.stringify(conditons)}, dataType : 'json', success:function(data){ console.log(data); }, error: function (XMLHttpRequest, textStatus, errorThrown){ alert("error"); } }); });
@RequestMapping("/http/pss/reserveOrderRetry") @ResponseBody public Object reserveOrderRetry(@RequestParam("conditions")List<Demo> conditions, @RequestParam("name")String name) { }
===================================================================================================================
===================================================================================================================
第一种:
1.新增类,其中有属性为该对象的集合
public class SettingModel { private List<Setting> sets; public final List<Setting> getSets() { return sets; } public final void setSets(List<Setting> sets) { this.sets = sets; } @Override public String toString() { return "SettingModel [sets=" + sets + "]"; } }
2.表单字段name属性值为数组形式:
<form action="/user/submitUserList_2" method="post"> ID:<input type="text" name="users[0].id"><br/> Username:<input type="text" name="users[0].name"><br/> Password:<input type="text" name="users[0].pwd"><br/><br/> ID:<input type="text" name="users[2].id"><br/> Username:<input type="text" name="users[2].name"><br/> Password:<input type="text" name="users[2].pwd"><br/><br/> <input type="submit" value="Submit"> </form>
3.后台接收:
@RequestMapping("/update") public void update(SettingModel users){ System.out.println(sets); }
第二种:
1.ajax请求,POST请求、'Content-Type' : 'application/json;charset=utf-8'、data:json(例如:[{"id":"1","content":"14"},{"id":"2","content":"测试修改2"}])
$.ajax({ url:'/update', type:'POST', headers : { 'Content-Type' : 'application/json;charset=utf-8' }, dataType:"json", data:datastr,//datastr=JSON.stringify(datastr);转换为JSON格式 success: function(data){ alert('111'); } });
2.后台接收:
@RequestMapping(value="/update") public void update(@RequestBody List<Setting> sets){ System.out.println(sets); }