1.默认的 spring mvc 不支持 参数 直接 接收 list ,需要 把list封装 在javabean中
2.@RequestBody注解 把json字符串 映射到 java 实体上 ,注意:ajax传 josn时 需要传 json字符串 而不是 json对象 可以用 JSON.stringify(data) 把json对象转json字符串
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端
/*服务器为什么会对表单提交和文件上传做特殊处理,因为表单提交数据是名值对的方式,且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,这时服务器就不知道怎么解析数据了,所以才只能通过获取原始数据流的方式来进行解析请求数据。*/
原文出处:
http://www.cnblogs.com/fenglie/articles/5127969.html