1.获取单个值的话,使用@PathVariable和@RequestParam,不过@PathVariable是从url中获取restful形式的数据,不会获取?后的拼接数据,而@RequestParam就是获取url?后拼接的数据。但是这两种都是获取url上的数据

http://localhost:8080/springmvc/hello/101?param1=10&param2=20
@RequestMapping("/hello/{id}")
public String getDetails(@PathVariable(value="id") String id,
	 @RequestParam(value="param1", required=true) String param1, 
	 @RequestParam(value="param2", required=false) String param2){
	 //param1的@RequestParam注解中的required=true,则必须传入参数
	.......
}

2.如果获取对象数据,@PathVariable只能获取字符串和一些简单类型,不能接收对象。@RequestParam和@RequestBody可以接收对象。
3.@PathVariable和@RequestParam都可以接收多个值,但是@RequestBody只能接收一个
4.@PathVariable和@RequestParam中的value和name属性互为别名,使用哪个都可以,defaultValue是设置默认值,required是设置是否为必输值。
5.@RequestParam可以处理表单类型数据,但是处理不了json,@RequestBody都可以处理json,但不能处理表单
6.使用@RequestParam接收的参数是会被Servlet转化放在request对象里的,所以使用HttpServletRequest request对象也是可以获取到的,但是@RequestBody不会。
7.

· @RequestParam @RequestBody
content-type multipart/form-data【表单】或者application/x-www-form-urlencoded【form表单数据】 application/json【json】或者application/xml【xml】
使用情况 涉及到文件上传和下载,传递比较少的参数 大多数情况使用,结构易理解

8.若涉及到图片的上传下载则需要用到@RequestParam的Spring类MultipartFile来支持。不同的注解支持不同的内容类型。
9.一般来说我们经常用的一般是@RequestBody,因为我们大多数请求都是application/json,好处有很多,结构化易理解,跟前者相比他可以批量化,可以通过json传多个对象信息过去。

因此在springboot项目中需要传递一整个实体类的参数情况下会用到RequestBody,而只需要传递不多的参数的时候使用RequestParam比较方便。

但是有的时候我们碍于一些原因,也会用到@RequestParam,比如文件的上传和下载,向我们spring中专门有个支持的类MultipartFile来支持这种请求。
总而言之,要看请求的类型来处理,比如json格式的@RequestParam可能无法处理,同理直接给一个MultipartFile 的file文件@RequestBody也无能为力。
10.@RequestParam注解加与不加的区别

  • 不加@RequestParam注解:可以接收单个参数,可以把接收的参数转换为对象,可以接收同样的参数多个(?age=10&age=20),使用数组来接收
  • 加@RequestParam注解:接收参数的变量名可以和传入的名字不一样,可以接收多个参数,可以设置默认值,如果不加required属性,默认为 true,也就是说,当@RequestParam存在时,是默认required = true条件的,当接收参数不匹配时,会报错;设置为false时表示可以不传参

11.关于@RequestBody注解的一些问题

  • 单个字符串等包装类型都要写⼀个对象才可以⽤@RequestBody接收;
  • 多个对象需要封装到⼀个对象⾥才可以⽤@RequestBody接收。
    如果是一个参数时也需要用个Map或者对象处理,使用String会报解析错误
  • 如果要写多个@RequestBody需要重写方法

12.如果使用@RequestParam强行接收自定义对象,需要使用WebDataBinder,这个留作之后研究使用方式。

原文地址:http://www.cnblogs.com/blanset/p/16830722.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性