zoukankan      html  css  js  c++  java
  • @RequestParam、@ReqeustBody、@ReponseBody认识

    简介:

    @RequestParam和@RequestBody均是处理request body部分的注解,都用于获取请求部分的参数。

    @ResponseBody是用于响应部分的注解

    1. @RequestParam注解

    1. 常用来处理简单类型的绑定,通过Request.getParameter() 获取的String可直接转换为简单类型的情况( String--> 简单类型的转换操作由ConversionService配置的转换器来完成);因为使用request.getParameter()方式获取参数,所以可以处理get 方式中queryString的值,也可以处理post方式中 body data的值;
    2. 用来处理Content-Type: 为 application/x-www-form-urlencoded编码(默认编码类型的内容,提交方式可为GET、POST
    3. 该注解有两个属性: value、required; value用来指定要传入值的id名称,required用来指示参数是否必须绑定;

    2. @RequestBody注解

    @RequestBody这个一般处理的是content-type不是默认的application/x-www-form-urlcoded编码的内容,比如说:application/json、application/xml等。一般情况下来说常用其来处理application/json类型,它是通过使用HandlerAdapter 配置的HttpMessageConverters来解析post data body,然后绑定到相应的bean上的,因为配置有FormHttpMessageConverter,所以也可以用来处理 application/x-www-form-urlencoded的内容,处理完的结果放在一个MultiValueMap<String, String>里,这种情况在某些特殊需求下使用,例如jQuery easyUI的datagrid请求数据的时候需要使用到这种方式、小型项目只创建一个POJO类的话也可以使用这种接受方式,详情查看FormHttpMessageConverter api

    通过@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. @ResponseBody注解

    @responseBody注解的作用是将controller的方法返回的对象通过适当的HttpMessageConverter转换器转换为指定的格式之后,写入到response对象的body区,通常用来返回JSON数据或者是XML数据,需要注意的呢,在使用此注解之后不会再走试图处理器,而是直接将数据写入到输入流中,他的效果等同于通过response对象输出指定格式的数据

    @RequestMapping(“/login”) 
      @ResponseBody 
      public User login(User user){ 
        return user; 
      } 
      User字段:userName pwd 
      那么在前台接收到的数据为:’{“userName”:”xxx”,”pwd”:”xxx”}’
    
      效果等同于如下代码: 
      @RequestMapping(“/login”) 
      public void login(User user, HttpServletResponse response){ 
       response.getWriter.write(JSONObject.fromObject(user).toString()); 
      }

     

    参考文档

    1. https://blog.csdn.net/kobejayandy/article/details/12690555
    2. https://blog.csdn.net/wangxy799/article/details/50952969
    3. https://blog.csdn.net/fengcai0123/article/details/73896391
    4. https://yq.aliyun.com/articles/154208
    5. https://www.cnblogs.com/guoyinli/p/7056146.html


        

     

    只为训练自己,时刻锤炼一个程序员最基本的技能!
  • 相关阅读:
    RN-Android构建失败:Caused by: org.gradle.api.ProjectConfigurationException: A problem occurred configuring root project 'AwesomeProject'.
    Android更新包下载成功后不出现安装界面
    真机调试: The application could not be installed: INSTALL_FAILED_TEST_ONLY
    react native 屏幕尺寸转换
    Android Studio生成签名文件,自动签名,以及获取SHA1和MD5值
    React Native安卓真机调试
    git提交代码报错Permission denied, please try again
    The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.
    命令行设置快捷命令
    Linux 常用指令
  • 原文地址:https://www.cnblogs.com/coding-wtf/p/9474318.html
Copyright © 2011-2022 走看看