ajax contenttype 與SpringMVC list參數傳遞


東西都是東一點西一點湊的,經過自己驗證。

1.    ajax傳JSON時設置的contenttype

默認值是application/x-www-form-urlencoded

當ajax傳JSON時設置的contenttype 如果是application/json或者text/json時,JAVA中request.getParameter("")是接收不到數據的。

因為在java后台會認為你傳遞的是一個純文本流,而非鍵值對,是不能存入requestMap的。

可以把流讀取出來轉成json轉成lsit或對象等,在Spring中使用@RequestBody注解

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

$(document).ready(function(){  
        var saveDataAry=[];  
        var data1={"userName":"test","address":"gz"};  
        var data2={"userName":"ququ","address":"gr"};  
        saveDataAry.push(data1);  
        saveDataAry.push(data2);         
        $.ajax({ 
            type:"POST", 
            url:"user/saveUser", 
            dataType:"json",      
            contentType:"application/json",               
            data:JSON.stringify(saveData), 
            success:function(data){ 
                                       
            } 
         }); 
    }); 
@RequestMapping(value = "saveUser", method = {RequestMethod.POST }}) 
    @ResponseBody  
    public void saveUser(@RequestBody List<User> users) { 
         userService.batchSave(users); 
    }

在SpringMVC中ajax傳遞list,需要對list進行封裝

public class ListPack{

     private List<MyUser> aaa;

     /*getter & setter*/  
}
public class MyUser{
  private String userName;
  private int age;  
}

ajax傳參數使用

data:{

 aaa[0].userName = "aaaaa",

 aaa[0].age = 23;

   aaa[1].userName = "aa222aa",

 aaa[1].age = 26;

}

即可傳遞list,與form表單的

<input type = 'text' name='aaa[0].realName'/>
<input type = 'text' name='aaa[0].age'/>
<input type = 'text' name='aaa[1].realName'/>
<input type = 'text' name='aaa[1].age'/>

效果是一樣的。

/*服務器為什么會對表單提交和文件上傳做特殊處理,因為表單提交數據是名值對的方式,且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,這時服務器就不知道怎么解析數據了,所以才只能通過獲取原始數據流的方式來進行解析請求數據。*/

 


免責聲明!

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



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