requestBody注解的正确使用

前端时间在做小程序水运头条时,有个需要通过阿里云的回调接口将上传到阿里云的小视频的视频大小,时长,封面等参数给回调到我们的后台,从而保存至数据库.回调接口嘛,以前写过,跟普通接口没多大区别.我就三下五除二的将接口给写好了,稍微的模拟测试了下,觉得没毛病了,我就直接给部署到测试环境了.(这里提一句,由于我本地的网络是公司内网,所以阿里云的接口是回调不了的,只好给部署到测试环境进行最终测试.)在这期间我是通过Postman去模拟调用上传小视频文件的接口,然后阿里云会回调我设置的接口地址根据不同的事件类型将不同的事件类型参数通过接口回调给我.最后将参数保存至数据库.原本以为会是这样,但是数据库中并没产生对应的新数据,这就说明回调失败了.当时我再想哪里出问题了,然后我又去看看接口回调开关开启没有又顺带仔细看了一遍阿里云提供的VOD的接口文档.

事实证明回调开关是开启的.

我的确也是按照这么做的呀.

没办法了,只能去看测试环境的日志了,这不看不知道,一看吓一跳.

这个是SpringMvc抛出的报错原因是指传递的参数与我实际接口接受的参数不符合.我又去看了下我的接口,是用@RequestBody来接受参数的.在我的认知中这个注解就是用来接受JSON对象的.由于长时间找不出原因,我的大佬来帮我看了下,把这个注解去掉了,然后就弄出来了.尽管是弄出了,但是我还是觉得很尴尬 ̄□ ̄||.这使得我尤其好奇@RequestBody这个注解的使用了,这一看果然发现我之前的认知都是错的.

@RequestBody正确用法

 

1、@requestBody注解常用来处理content-type不是默认的application/x-www-form-urlcoded编码的内容,比如说:application/json或者是application/xml等。一般情况下来说常用其来处理application/json类型。@RequestBody接受的是一个json格式的字符串,一定是一个字符串。

2、通过@requestBody可以将请求体中的JSON字符串绑定到相应的bean上,当然,也可以将其分别绑定到对应的字符串上。

    例如说以下情况:
    $.ajax({
        url:"/login",
        type:"POST",
        data:'{"userName":"admin","pwd","admin123"}',
        content-type:"application/json charset=utf-8",
        success:function(data){
          alert("request success ! ");
        }
    });

    @requestMapping("/login")
    public void login(@RequestParam(value= "userName") String userName,@RequestParam(value= "pwd") String pwd){
      System.out.println(userName+" :"+pwd);
    }
    这种情况是将JSON字符串中的两个变量的值分别赋予了两个字符串,但是呢假如我有一个User类,拥有如下字段:
      String userName;
      String pwd;
    那么上述参数可以改为以下形式:@requestBody User user 这种形式会将JSON字符串中的值赋予user中对应的属性上

    需要注意的是,JSON字符串中的key必须对应user中的属性名,否则是请求不过去的。

总结:1.@RequestBody接受的是一个json格式的字符串,一定是一个json对象字符串。

        2.在使用springmvc的做项目时,将JSON字符串和JSON对象混淆了

        3.@RequestParam接受单个参数,参数位置位于链接后。@RequestBody接受JSON对象字符串,参数位置位于请求体。

参考博客来源1:点击打开链接

参考博客来源2:点击打开链接

  • 23
    点赞
  • 80
    收藏
    觉得还不错? 一键收藏
  • 11
    评论
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值