ajax post json到服务器的小细节
1.服务器端,spring mvc 代码:
@RequestMapping(value = "/save")
@ResponseBody
public BaseModelResult<Long> update(@RequestBody User param) {
....
}
通过标记@RequestBody 会将请求的json数据自动转为对象,实际上如果web页面通过form表单提交的话,直接update(User param)这种方式也能自动转,不太喜欢这种json方式,有时有点坑。
2.Web页面代码
$.ajax({ type: "POST", url: "save.do", contentType:"application/json", data: JSON.stringify({name:$("#userName").val(), password:$("#password").val() }), dataType: "json", success: function (result) { console.log(result); }, error: function (message) { console.log(message); } });
注意标红的地方:
(1)contentType 默认为表单提交,也就是application/x-www-form-urlencoded方式,此处需要改为json方式
(2)data传入数据,此处需要注意需要转为字符串,不能传对象,感觉挺坑,此处应该与一般的post/get方式一致,都应为对象才好
---
2021.7.3
json与表单提交方式相比能传入更复杂的对象,其实使用来讲更加灵活一些:
比如下面传入数组方式:
Java代码
/**
* @param userList :接收页面单个:POJO List。必须加 @RequestBody 注解
* @return
*/
@PostMapping("save3")
public String save3(@RequestBody List<User> userList) {
for (User user : userList) {
logger.info("save3--->" + user);
}
return new Date() + "传输完毕:" + userList;
Javascript:
//后台是 List<User>,则前台使用数组([])表示 List,使用 json 对象表示 User 对象
var data = [];
for (var i = 0; i < 3; i++) {
var user = {};//每一个 json 对象相当于后台的 User 对象,因为都是 key-value 格式。
user.uId = (i + 1);//key 值必须与后台 POJO 属性一致。value 的类型必须与后台数据类型一致。
user.uName = "huaAn_" + (i + 1);
data.push(user);//将 json 对象添加到数组中
}
$.ajax({
//默认传输的内容类型为 key-value 型,后台使用数组、List 接收参数时,
// headers 中必须指定内容类型为 json 类型,否则会报415错误
headers: {
'Content-Type': 'application/json'
},
type: "post",
url: "http://localhost:8080/user/save3",
//指定 json 类型后,传输的数据理所当然应该是 json 格式。
data: JSON.stringify(data),
success: function (data) {
console.log(data);
},
error: function (data) {
console.log("ERROR:" + JSON.stringify(data));
}
浙公网安备 33010602011771号