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

一、传数组

var list=[];
list.push('132');
list.push('132');
$.ajax({
url:'stopUsePrice.do?isdebug=true',
type:'POST',
contentType:"application/json",
data:JSON.stringify(list),
dataType:'json',
success:function(data){ }
})

  

二、对象集合

var model;
model={"Id":"555","AuditId":"666"};
var saveDataAry=[];
saveDataAry.push(model);
$.ajax({
url:'stopUsePrice.do?isdebug=true',
type:'POST',
contentType:"application/json",
data:JSON.stringify(saveDataAry),
dataType:'json',
success:function(data){ }
})

  

public class FomfSupperPriceMethodAdModel implements IModel {
/** 版本号 */
private static final long serialVersionUID = 1L; /** 主键ID */
@JsonProperty("Id")
private String id; /** 报价主表ID */
@JsonProperty("AuditId")
private String auditId; }

  

也可以用键值对来接收

三、组合参数

var model;
model={"Id":"555","AuditId":"666"};
var saveDataAry=[];
saveDataAry.push(model);
saveDataAry.push(model);
$.ajax({
url:'stopUsePrice.do?isdebug=true',
type:'POST',
contentType:"application/x-www-form-urlencoded; charset=UTF-8",
//这里不是application/json,可以不写
data:{aa:JSON.stringify(saveDataAry),bb:"bb"},
// 可以传递多个参数,但此时的users内容与另外一个参数:aa 的内容一起传递,所以后台解析为字符串
// 后台接收的aa内容:[{"Id":"555","AuditId":"666"},{"Id":"555","AuditId":"666"}]
// 后台接收的bb内容:"bb"
//data:JSON.stringify(saveDataAry),
dataType:'json',
success:function(data){ }
})

  

组合参数优化

var delayDate = $("#delay_date").val();
var delayDateDis=new Date(Date.parse(delayDate.replace(/-/g,"/"))); var ids=[];
ids.push("cee1c898d3384800acee6b5fdd1bad31");
ids.push("cee1c898d3384800acee6b5fdd1bad32"); layer.confirm('是否确定延长报价名称为【'+ names +'】的报价至 : <br><br>'+delayDate, {
btn: ['确定', '取消']
},
function(index, layero){
$.ajax({
url:'delayTime.do?isdebug=true',
type:'POST',
//contentType:"application/x-www-form-urlencoded; charset=UTF-8",
data:{Ids:JSON.stringify(ids),delayDate:delayDateDis},
dataType:'json',
success:function(data){
layer.close(index);
if(data.StatusCode == 'success'){
alert(data.Data);
select_q();
}
}
})
},
function(index){
layer.close(index);
});

  

springMVC通过ajax传参到后台的更多相关文章

  1. jq中的ajax传参

        一.   jq中的Ajax传参有两种           1.通过url地址来传参    2.通过data来传递参数 1. url来传递参数 function GetQuery(id) { | ...

  2. Ajax传参讲解

    客户端和服务器 1.请求:request 2.响应:response 服务器响应事件:onreadystatechange() send() 用于向后台传递参数: Ajax的请求方式 get:    ...

  3. jq ajax传参的两种方式

    第一种   在url ? 后通过拼接传参   第二种 通过data传参 (1)第一种方法:(通过url传参) function GetQuery(id) { if (id ==1||id==7) { ...

  4. angularjs向后台传参,后台收不到数据

    angularjs中封装了一个$http服务,用来请求远程资源 参见:HTTP API 其中封装过的$http.post和$http.get使用起来比较方便 后台是php,用$_POST['name' ...

  5. ajax传参到实体类对应字段

    之前看公司的代码,从页面ajax传参数到接口类,接口类用一个实体接收.我一直以为c#会自动识别,赋值到同名的字段. 我曾和朋友讨论过,双方辩论.朋友认为c#没有这种功能,没有这样高级匹配的机制.而我因 ...

  6. ajax 传参 乱码问题

    http://blog.csdn.net/yiyuhanmeng/article/details/7548505 开发一直用firfox网页,调试什么的都很方便.所以遇到了浏览器之间的兼容问题.url ...

  7. ajax传参data里面的键是一个变量的解决方法

    直接用这种方式来传参,比如bean中有字段 username password,则是 data[username] = "用户名"; data[password] = " ...

  8. 超全table功能Datatables使用的填坑之旅--2:post 动态传参: 解决: ajax 传参无值问题.

    官网解释与方法:1 当向服务器发出一个ajax请求,Datatables将会把服务器请求到的数据构造成一个数据对象. 2 实际上他是参考jQuery的ajax.data属性来的,他能添加额外的参数传给 ...

  9. ajax传数组到后台,后台springmvc接收数组参数

    var   ids= new Array();  $("input[class='detailCheck']:checked").each(function(i,k){   var ...

随机推荐

  1. nvm安装

    1.下载安装包,地址:https://github.com/coreybutler/nvm-windows 2.解压后,点击 nvm-setup 安装,一路默认安装,next下去 3.打开安装位置,然 ...

  2. UVA - 11404

    题意:求任意删除字符后所形成的最长回文,并输出字典序最小的方案 把原串反转求LIS,因为转移时不断求字典序最小导致后半部分可能并非回文,所以要前半部分输出两边 话说这方案保存可真暴力 #include ...

  3. js面向切面编程

    Function.prototype.before=function(func){ var _self=this; return function(){  if(func.apply(this,arg ...

  4. maven的resources插件

    <build><sourceDirectory>src/jvm</sourceDirectory> <testSourceDirectory>test/ ...

  5. PHP创建自己的Composer包方法

    原文地址:http://www.jb51.net/article/137923.htm

  6. CI 框架中的日志处理 以及 404异常处理

    最近在整理项目中的日志问题,查了一些关于 “CI 框架中的日志处理 以及 404异常处理” 的东西,顺便记录一下: 关于错误日志: 1. 在CI框架中的 system/core/CodeIgniter ...

  7. TimesTen客户端DSN配置

    打开控制面板\管理工具 1.打开数据源(ODBC) 2.选择系统DSN 3.选择添加: 4.单击完成 5.Servers

  8. 案例44-crm练习新增客户使用struts2

    1 src下配置文件 1 struts.xml <?xml version="1.0" encoding="UTF-8"?> <!DOCTYP ...

  9. layer框架使用的问题汇总

    一.如何设置弹出框弹出后不影响页面的其他操作 解决:在属性中添加设置zIndex即可

  10. pat02-线性结构3. 求前缀表达式的值(25)

    02-线性结构3. 求前缀表达式的值(25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 算术表达式有前缀表示法.中缀表示法和后缀表示法 ...