springMVC通過ajax傳遞參數list對象或傳遞數組對象到後台

來源:互聯網
上載者:User

標籤:spring   data   對象   enc   json   為什麼   ase   檔案   list   

springMVC通過ajax傳遞參數list對象或傳遞數組對象到後台環境:
  • 前台傳遞參數到後台
  • 前台使用ajax
  • 後台使用springMVC
  • 傳遞的參數是N多個對象

 

JSON對象和JSON字串
在SpringMVC環境中,@RequestBody接收的是一個Json對象的字串,而不是一個Json對象。
然而在ajax請求往往傳的都是Json對象,用 JSON.stringify(data)的方式就能將對象變成字串。
同時ajax請求的時候也要指定dataType: "json",contentType:"application/json" 這樣就可以輕易的將一個對象或者List傳到Java端!

Content-Type
  伺服器為什麼會對錶單提交和檔案上傳做特殊處理,因為表單提交資料是名值對的方式,且Content-Type為application/x-www-form-urlencoded,
而檔案上傳伺服器需要特殊處理,普通的post請求(Content-Type不是application/x-www-form-urlencoded)資料格式不固定,不一定是名值對的方式,
所以伺服器無法知道具體的處理方式,所以只能通過擷取未經處理資料流的方式來進行解析。jquery在執行post請求時,會設定Content-Type為application/x-www-form-urlencoded,所以伺服器能夠正確解析,而使用原生ajax請求時,
如果不顯示的設定Content-Type,那麼預設是text/plain,這時伺服器就不知道怎麼解析資料了,所以才只能通過擷取未經處理資料流的方式來進行解析請求資料。


第一種方式 傳遞的參數Bean
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){                        }                    });                })
java檔案 @RequestMapping(value = "saveUser", method = {RequestMethod.POST })     @ResponseBody    public void saveu( @RequestBody List<User> users ){ //此時的user是map資料,並沒有解析為bean // 不建議使用         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);      }     // 這裡就可以使用 userList 了 }

 

第三種方式

能夠傳遞多個參數,但是每一個參數都是字串(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){                        }                    });                })
java檔案@RequestMapping(value = "saveUser", method = {RequestMethod.POST })     @ResponseBody    public void saveu( String users , String aa ){         System.out.println(users) ;    }

 

轉載自 73361104

 
 

springMVC通過ajax傳遞參數list對象或傳遞數組對象到後台

相關文章

Alibaba Cloud 10 Year Anniversary

With You, We are Shaping a Digital World, 2009-2019

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。