springMVC通過ajax傳遞參數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) ;
    }

 

轉載自 https://blog.csdn.net/alan_alei/article/details/73361104

 
 


免責聲明!

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



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