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,这时服务器就不知道怎么解析数据了,所以才只能通过获取原始数据流的方式来进行解析请求数据。*/

 

posted @ 2016-01-13 17:33  fenglie  阅读(8561)  评论(0编辑  收藏  举报
版权所有,转载声明