今天使用jquery的ajax意外的发现一个问题,如果ajax请求不指定ContentType的话,它默认的请求类型就是Content-Type: application/x-www-form-urlencoded; charset=UTF-8
,它和form表单的请求方式一致,后台可以通过java bean对象来直接映射
$.post('/demo', {
username: '大哥哥',
}, function (res) {
console.log(res)
})
@RequestMapping("/demo")
@ResponseBody
public String demo(User user) {
System.out.println(user);
return "发噶嘎嘎";
}
输出结果:
如果User类的结构是这样的:
可以很清楚的看到,User类中有一个Classs类的引用,如果ajax请求需要将User对象的参数发送给后台,并将classs属性中的属性也一并传值给后台,那么像上面的写法就不能满足当前业务逻辑的需求了。
$.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)
}
})
@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 "发噶嘎嘎";
}
输出结果:
注:@RequestBody只能在请求为json格式的时候才能使用
需要设置contentType
为json
格式、将传递数据用JSON.stringify()转成字符串、Spring Mvc需要在参数前加@RequestBody的情况:
除了以上情况,就算是后台需要映射多个对象的时候,也可以用平常的方法解决
比如:username给User赋值,classname给Classs赋值
$.post('/demo', {
username: '大哥哥',
classname: '32:10班'
}, function (res) {
console.log(res)
})
@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 "发噶嘎嘎";
}
输出结果:
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。