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

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

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

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值