验证码: 看不清楚,换一张 查询 注册会员,免验证
  • {{ basic.site_slogan }}
  • 打开微信扫一扫,
    您还可以在这里找到我们哟

    关注我们

SpringMVC之@requestBody的作用是什么

阅读:905 来源:乙速云 作者:代码code

SpringMVC之@requestBody的作用是什么

      @requestBody的作用及说明

      1、@requestBody注解常用来处理content-type不是默认的application/x-www-form-urlcoded编码的内容,比如说:application/json或者是application/xml等。

      一般情况下来说常用其来处理application/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(@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中的属性名,否则是请求不过去的。 

      3、在一些特殊情况@requestBody也可以用来处理content-type类型为application/x-www-form-urlcoded的内容,只不过这种方式不是很常用,在处理这类请求的时候,@requestBody会将处理结果放到一个MultiValueMap中,这种情况一般在特殊情况下才会使用,例如jQuery easyUI的datagrid请求数据的时候需要使用到这种方式、小型项目只创建一个POJO类的话也可以使用这种接受方式。

      作用:     

      • i) 该注解用于读取Request请求的body部分数据,使用系统默认配置的HttpMessageConverter进行解析,然后把相应的数据绑定到要返回的对象上;     

      • ii) 再把HttpMessageConverter返回的对象数据绑定到 controller中方法的参数上。

      使用时机:

      A) GET、POST方式提时, 根据request header Content-Type的值来判断:   

      • application/x-www-form-urlencoded, 可选(即非必须,因为这种情况的数据@RequestParam, @ModelAttribute也可以处理,当然@RequestBody也能处理);   

      • multipart/form-data, 不能处理(即使用@RequestBody不能处理这种格式的数据);   

      • 其他格式, 必须(其他格式包括application/json, application/xml等。这些格式的数据,必须使用@RequestBody来处理); 

      B) PUT方式提交时, 根据request header Content-Type的值来判断:   

      • application/x-www-form-urlencoded, 必须;   

      • multipart/form-data, 不能处理;   

      • 其他格式, 必须;

      • 说明:request的body部分的数据编码格式由header部分的Content-Type指定;

      使用@RequestBody浏览器报415错误

      最近在写一个前后端分离项目,前后端数据交互都使用json的格式,在使用SpringMVC的@RequestBody时,一直报415的错误,意思就是后台无法处理content-type=application/json格式的数据,我后台已经使用@RequestBody,就是不行,但是如果参数类型为String就可以接收,实体类的就是不行,看了很多教程,冲浪了一天,终于找到了解决方案。

      解决方式

      1。在项目中导入两个jar包

          
            org.codehaus.jackson
            jackson-mapper-asl
            1.9.13
          
       
          
            org.codehaus.jackson
            jackson-core-asl
            1.9.13
          

      2.在app-servlet.xml(你的springmvc配置文件),加入一行配置 

      或者配置一个适配器(两种方式选一个即可,我是使用的上面的方式)

          
              
                  
                      
                  
              
          

      这样就解决了415的报错。

      附上我的controller层的代码。

      @RestController
      @CrossOrigin
      public class LoginController {
          @PostMapping("/loginPost")
          public String loginPost(@RequestBody User user,@RequestHeader HttpHeaders header){
              System.out.println(header.getContentType());
              System.out.println(user.getName());
              System.out.println(user.getPassword());
              return "success";
          }
      }
    分享到:
    *特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: hlamps#outlook.com (#换成@)。
    相关文章
    {{ v.title }}
    {{ v.description||(cleanHtml(v.content)).substr(0,100)+'···' }}
    你可能感兴趣
    推荐阅读 更多>