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); }