【spring框架】@PathVariable、@RequestParam、@RequestBody
1.获取单个值的话,使用@PathVariable和@RequestParam,不过@PathVariable是从url中获取restful形式的数据,不会获取?后的拼接数据,而@RequestParam就是获取url?后拼接的数据。但是这两种都是获取url上的数据
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,这个留作之后研究使用方式。
__EOF__
本文链接:https://www.cnblogs.com/blanset/p/16830722.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
作者:blanset
出处:https://www.cnblogs.com/blanset/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律