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

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)
@ResponseBody
public 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)
@ResponseBody
public 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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值