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));
    }

  

posted on 2019-04-19 19:30  webjlwang  阅读(916)  评论(0编辑  收藏  举报

导航