SpringMVC 控制器用Map接收前端参数

前端发送post请求,使用ajax发送json字符串,使用ajax以post方式发送json数据只能发送json字符串才能被控制器用Map接收,如果发送json对象,就会导致请求数据变成这样:),

这样的数据是没办法被SpringMVC解析的。而发送json字符串,请求数据就变成了json格式的数据,就可以被解析了。

<a href="javascript:void(0);" onclick="postSend()">测试post发送Map数据</a><br>
<script type="text/javascript">
function postSend(){
$.ajax({
    url:"${ctx}/account/postsend",
    data:'{"uid":"10021","uname":"zhangsan","uage":"15","usex":"男","uphone":"18296126955","uadderss":"幸福小区23号"}',
    type:"post",
    contentType:"application/json;charset=utf-8",
    dataType:'json',
    success:function(data){
        alert("send success!");
        console.log(data);
    }
})

}
</script>

后台控制器:

@RequestMapping("/account/postsend")
    @ResponseBody
    public Map<String,String> postSend(@RequestBody Map<String,String> map){
        for(Map.Entry<String,String> me:map.entrySet()){
            System.out.println(me.getKey()+"::"+me.getValue());
        }
        System.out.println(" map end");
        return map;
    }

打印结果:

 

前端发送get请求,使用ajax发送json对象数据,这时使用get请求就可以发送json对象了,这时候浏览器的请求数据如下:

<a href="javascript:void(0);" onclick="getSend()">测试接收Map数据</a><br>
<script type="text/javascript">
function getSend(){
    $.ajax({
        url:"${ctx}/account/getsend",
        data:{"uid":"10021","uname":"zhangsan","uage":"15","usex":"男","uphone":"18296126955","uadderss":"南昌市新建区幸福小区23号"},
        type:"get",
        contentType:"application/json;charset=utf-8",
        dataType:'json',
        success:function(data){
            alert("send success!");
            console.log(data);
        }
    })

}
</script>

后台控制器:

@RequestMapping(value="/account/getsend",method = RequestMethod.GET)
    @ResponseBody
    public Map<String,String> getSend(@RequestParam Map<String,String> map){
        for(Map.Entry<String,String > me:map.entrySet()){
            System.out.println(me.getKey()+":::"+me.getValue());
        }
        System.out.println(" map end.");
        return map;
    }

打印结果:

细心的同学可能会发现,两个控制器中的参数Map前面的注解不一样,接收post请求,用的是@RequestBody,而接收get请求用的是@RequestParam。

原因是:

@RequestBody 注解常用来处理Content-Type不是application/x-www-form-urlencoded编码的内容,而是例如application/json, application/xml等编码的;

它是通过使用HandlerAdapter 配置的HttpMessageConverters来解析post data body,然后绑定到相应的bean上的。

@RequestParam 用于在控制层获取请求体中的参数,类似使用request.getParameter("name"); 而我们上面已经看到了,使用get发送json对象,Query string 就是标准的key-value格式数据,非常符合@RequestParam的取值要求。

 

 

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值