ajax发送请求后台接收不到参数
做项目的过程中,springmvc Controller接收前端ajax请求参数总是接收不到,为null值,具体代码如下:
前端ajax代码:
$.ajax({
headers: {
'Content-type': 'application/json; charset=utf-8'
},
url : getContextPath()+"/groupUserRel/insert",
data :{
"groupId": "80901",
"userName": name,
"userMobile": tel,
"address": address,
"userWeightCount": weight,
"userSendCount": number
},
dataType: 'json',
type:"POST",
success : function(response) {
console.log(response);
}
})
controller代码:
@RequestMapping(value = "insert")
@ResponseBody
public Result<Boolean> insert(ProGroupUserRelVo vo) {
Result<Boolean> result = new Result<>(false);
System.out.println(vo);
return result;
}
经过不断的尝试,发现问题出在ajax的请求头:’Content-type’: ‘application/json; charset=utf-8’,这个参数设置指定了传到后台的参数类型为json格式,但是ajax传输的却不是json串,所以需要改成如下:
一、解决方法1
1.将ajax请求中的data转换成json字符串,采用JSON.stringify(s)函数完成转换
$.ajax({
headers: {
'Content-type': 'application/json; charset=utf-8'
},
url : getContextPath()+"/groupUserRel/insert",
data : JSON.stringify({
"groupId": "80901",
"userName": name,
"userMobile": tel,
"address": address,
"userWeightCount": weight,
"userSendCount": number
}),
dataType: 'json',
type:"POST",
success : function(response) {
console.log(response);
}
})
2.后台代码在接收参数对象上加上@RequestBody注解
@RequestMapping(value = "insert")
@ResponseBody
public Result<Boolean> insert(@RequestBody ProGroupUserRelVo vo) {
Result<Boolean> result = new Result<>(false);
System.out.println(vo);
return result;
}
这样就可以映射到参数了
二、解决方法2
直接将ajax请求头中的Content-type去除就可以了,让ajax发送默认的Content-Type: application/x-www-form-urlencoded,这样springmvc就可以自己解析,而不用告诉springmvc要以什么样的方式解析