欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-07-15 15:39:37
...

本文以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传递对象,可以以单个字段的形式传递到后台,再拼成对象,不过较为麻烦。

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

相关标签: spring mvc ajax