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格式的字符串,一定是一个字符串。

扫描二维码关注公众号,回复: 2413246 查看本文章

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

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

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

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

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

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

猜你喜欢

转载自blog.csdn.net/qq_36090463/article/details/80990938
今日推荐