简介:

@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

    

 

最新文章

  1. javascript的document中的动态添加标签
  2. Java自定义表单、自定义字段
  3. Codeforces 417 C
  4. CentOS查看系统信息命令和方法
  5. css style与class之间的区别
  6. 用生活例子来解释Java synchronized块
  7. Apache CXF多个远程拒绝服务漏洞(CVE-2013-2160)
  8. BEncoding的编码与解码
  9. Redis14--jedis实现主从模式。
  10. pxe+kickstart cobbler无人值守装机
  11. 第五章——支持向量机(Support Vector Machines)
  12. 【机器学习】BP &amp; softmax求导
  13. Android开发之如何避免ANR(Keeping Your App Responsive)
  14. 《剑指offer》-双栈实现队列
  15. org.joda.time.DateTime 日期格式
  16. Hadoop &quot;Cannot create directory .Name node is in safe mode.&quot;解决方案
  17. sql语句Order by 报错列名不明确
  18. python进程join()函数理解
  19. poj2151--Check the difficulty of problems(概率dp第四弹,复杂的计算)
  20. Java数据库操作(JDBC)

热门文章

  1. 使用cookie时出现“未将对象引用设置到对象实例”
  2. 微信小程序 获取用户信息授权
  3. 使用Axure做验证码之校验验证码(二)
  4. you-get 下载视频
  5. MAC 终端上传代码到Github 或者 Gitlab
  6. C语言中的二维数组
  7. Qt 学习-----helloword
  8. H5中input[type=&quot;date&quot;]默认样式修改 伪类
  9. initWithFrame方法的使用
  10. PYTHON3-LIST.SORT(),SORTED()方法详解。