Spring MVC 中使用ajax发送POST请求时的参数问题

来源:互联网 发布:软件编程自学网站 编辑:程序博客网 时间:2024/04/26 04:20

Spring MVC提供了丰富的数据转换的Converter类,供前台与后台交互时进行数据自动转换(包装)

具体Converter类:http://www.cnblogs.com/zivxiaowei/p/3459606.html(MappingJacksonHttpMessageConverter为Spring MVC 4.0之前版本的类)

在具体代码中,只需要在配置文件中添加

<mvc:annotation-driven />

Spring MVC将为我们自动装配基本所有的Converter自动转换类。


使用Ajax 向后台发送请求时,经常会遇到各种参数错误问题。这里主要讲传JSON 形式的参数


1、当传递的对象不包含列表和哈希表属性时

如:

public class User {    private String userName;    private String password;    private String email;}

此时可以直接将数据组装成规范的JSON对象传递,前台后台不用做任何处理

js代码:

$("#ajaxSubmit2").click(function(){    var user = {        userName: "lily",        password: "345",        email: "345@qq.com"      };    $.ajax({       url: "../methodParam/ajaxSubmit2",      type: 'POST',      dataType: 'json',      data: user,      success: function(data) {        alert(data.userName);      }    });

controller:

@RequestMapping(value = "ajaxSubmit2", method = RequestMethod.POST)@ResponseBodypublic UserDTO ajaxSubmit2(UserDTO user) {    System.out.println(user.getUserName());    return user;}

此时请求中的参数存放在Form data中


2、当传递的参数包含数组时

POJO类:

public class Project {    private String name;    private User[] users;}
JS数据:

var users = [            {                "userName": "tom",                "password": "123",                "email": "123@qq.com"            },            {                "userName": "jack",                "password": "234",                "email": "234@qq.com"            },            {                "userName": "lily",                "password": "345",                "email": "345@qq.com"            }           ];var project = {"project.name": "DMP", "project.users": users};
此时无法用1中的方法进行参数传递,需要将对象转成JSON格式的字符串

js代码:

$.ajax({   url: "../methodParam/ajaxSubmit",  type: 'POST',  contentType: "application/json",  dataType: 'json',  data: JSON.stringify(project),  success: function(data) {  alert(data.name);  }});
其中contentType和JSON.stringify是必须的,后台根据contentType进行判断用哪种转换器进行数据转换

后台Controller必须添加RequestBody注解

@RequestMapping(value = "ajaxSubmit", method = RequestMethod.POST)@ResponseBodypublic User ajaxSubmit(@RequestBody ProjectDTO project) {    System.out.println(project.getUsers()[0].getUserName());    User user = new User();    user.setName(project.getUsers()[0].getUserName());    return user;}
此时request中的数据存放在request payload中

注:JSON数组也用此方式


另外,在项目中遇到的不规范的数据格式写法的整理

1、传递user对象

  $("#formAjaxSubmit").click(function(){    var data = {};    data['user["userName"]'] = "tomtom";    data['user["password"]'] = "123";    data['user["email"]'] = "123@qq.com";    $.ajax({       url: "../user/formAjaxSubmit",      type: 'POST',      dataType: 'json',      data: data,      success: function(data) {        alert(data);      }    });  });
2、传递project对象

  $("#arrayAjaxSubmit").click(function(){    var data = {};    data['users[0].userName'] = "tom";    data['users[0].password'] = "123";    data['users[0].email'] = "123@qq";    data['users[1].userName'] = "lily";    data['users[1].password'] = "234";    data['users[1].email'] = "234@qq";    data['name'] = "DMP";        $.ajax({      url: "../methodParam/arrayAjaxSubmit",      type: 'POST',      dataType: 'json',      data: data,      success: function(data) {        alert(data.userName);      }    });  });
后台不用添加任何注解


0 0
原创粉丝点击