今天使用jquery的ajax意外的发现一个问题,若是ajax请求不指定ContentType的话,它默认的请求类型就是Content-Type: application/x-www-form-urlencoded; charset=UTF-8
,它和form表单的请求方式一致,后台能够经过java bean对象来直接映射java
$.post('/demo', {
username: '大哥哥',
}, function (res) {
console.log(res)
})
复制代码
@RequestMapping("/demo")
@ResponseBody
public String demo(User user) {
System.out.println(user);
return "发噶嘎嘎";
}
复制代码
输出结果: jquery
ContentType
这个属性,这样就不能使用 $.get()
或者$.post()
了,由于它们不能自定义请求参数,解决办法:$.ajax({
url: '/demo',
method: 'post',
// 指定contentType和JSON.stringify()序列化数据是必需要作的,这很重要
contentType: 'application/json;charset=utf-8',
data: JSON.stringify({
username: '大哥哥',
// classs属性是Class类在User类中的引用属性
classs: {
// Class的属性
classname: '32:10班'
}
}),
success: function (res) {
console.log(res)
}
})
复制代码
后台代码:ajax
@RequestMapping("/demo")
@ResponseBody
// 加上@RequestBody这个参数后,参数栏就只能接收user这一个参数了,spring mvc会将前台传过来的全部数据都序列化成User对象,给里面的属性附好值
public String demo(@RequestBody User user, HttpServletRequest request) {
System.out.println(user);
System.out.println(request.getHeader("Content-Type"));
return "发噶嘎嘎";
}
复制代码
输出结果: spring
注:@RequestBody只能在请求为json格式的时候才能使用json
须要设置contentType
为json
格式、将传递数据用JSON.stringify()转成字符串、Spring Mvc须要在参数前加@RequestBody的状况:数组
传递数组的问题在个人上一篇博客中已经讲到:数组问题解决mvc
除了以上状况,就算是后台须要映射多个对象的时候,也能够用日常的方法解决
好比:username给User赋值,classname给Classs赋值app
$.post('/demo', {
username: '大哥哥',
classname: '32:10班'
}, function (res) {
console.log(res)
})
复制代码
后台代码:post
@RequestMapping("/demo")
@ResponseBody
public String demo(User user, Classs classs, HttpServletRequest request) {
System.out.println(user);
System.out.println(classs);
System.out.println(request.getHeader("Content-Type"));
return "发噶嘎嘎";
}
复制代码
输出结果: ui