• @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


        

     

    只为训练自己,时刻锤炼一个程序员最基本的技能!
  • 相关阅读:
    转载、收藏
    AndroidStudio 问题收集
    android4.4 添加快捷开关(以截屏为例)
    打开USB调试功能
    关于Http通信
    【原创】JMS生产者和消费者【PTP同步接收消息】
    【学习】JMS通信模式
    【原创】Unable to read TLD "META-INF/c.tld" from JAR file 解决方法
    【原创】websphere部署war包报错
    【转载】tom的RUNSTATS测试工具
  • 原文地址:https://www.cnblogs.com/coding-wtf/p/9474318.html
Copyright © 2020-2023  润新知