SpringMVC中ajax传值的几种接收方式

来源:互联网 发布:淘宝代码怎么写 编辑:程序博客网 时间:2024/05/18 03:03

本文以springmvc为背景,模拟ajax发送get/post请求时,展示Controller层方法接收参数的几种方式。

  • 传递的是普通的字段
<script type="text/javascript">    function test() {        $.get("ajax/test", {            "name" : "123",            "age" : 23        }, function(data, status) {            alert(data);        })    }</script></head><body>    <button id="btn" onclick='test()'>测试ajax</button></body>

无关乎是get方法还是post方法,使用ajax传递参数主要的是拼接json,拼接参数json。

方式一:一个萝卜一个坑,比对着传递的参数,在方法体中声明形参,如下:

@Controller@RequestMapping("/ajax")public class AjaxController {    @RequestMapping(value = "/test", method = RequestMethod.POST)    public String doSomethins(String name, int age) {        return "index";    }}

这种方式,若是GET请求,还可以直接将参数拼在URL后面,如ajax/test?name=123&age=23 获取方式不变

方式二:由于ajax是借助于http协议来发送请求,接收响应的。而且是web项目嘛,所以可以使用HttpServletRequest这个类来获取参数,如下:

@Controller@RequestMapping("/ajax")public class AjaxController {    @RequestMapping(value = "/test", method = RequestMethod.POST)    public String doSomethins(HttpServletRequest request) {        String name = request.getParameter("name");        //这里未进行类型转换        String age = request.getParameter("age");        return "index";    }}
  • 若传递的是普通对象
public class User implements Serializable {    private static final long serialVersionUID = -5824634576564462723L;    private String name;    private int age;    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public int getAge() {        return age;    }    public void setAge(int age) {        this.age = age;    }}

POST请求的话,传递到后台的必须是JSON字符串,而不应该是JSON对象。而且还要显示的设置contentType : ‘application/json;charset=UTF-8’,不然会报出415错误。
还要注意的是 json字符串中的字段要与对象中是完全一致的。 如配置皆正确,还是出现415错误,那可能缺少解析json的jar包,如jackson-mapper-asl,jackson-core-asl;亲测有用

JSON.stringify(obj)==>可以将json对象转化为json字符串

JSON.parse(obj)==>可以将json字符串转化为json对象

json对象,如var user={name:”123”,age:23};

json字符串,如var user={“name”:”123”,”age”:23}

//这里贴出js代码function test() {        var user = {            name : "123",            age : 23        };            var userData = JSON.stringify(user);        $.ajax({            url : 'ajax/test',            dataType : 'json',            contentType : 'application/json;charset=UTF-8',            type : 'POST',            data : userData,            async : true,            success : function(data, status) {            }        });
//贴出代码,这里的user对象是有数据的,即ajax传递过来的@RequestMapping(value = "/test", method = RequestMethod.POST)//@RequestBody 接收的参数格式必须是json    public String doSomethins(@RequestBody User user) {        return "index";    }
  • 若传递的是集合数组

若依然使用POST方式传递参数,则跟上述POST传递方式类似,只是对象变成了集合,而后台接收的形参变成了集合,代码如下:

function test() {        var lists = JSON.stringify([ {            name : "123",            age : 23        }, {            name : "124",            age : 24        } ]);        var user = {            name : "123",            age : 23        };        $.ajax({            url : 'ajax/test',            dataType : 'json',            contentType : 'application/json;charset=UTF-8',            type : 'POST',            data : lists,            async : true,            success : function(data, status) {            }        });    }
@RequestMapping(value = "/test", method = RequestMethod.POST)    public String doSomethins(@RequestBody List<User> user) {        return "index";    }
  • GET方式传递对象
    依照上述思想使用GET方式传递对象时,一直400。还请熟悉的大神指点。

    另外,若非得使用GET传递对象,可以以单个字段的形式传递到后台,再拼成对象,不过较为麻烦。

以上,若有错误,请指出,谢谢!

原创粉丝点击