RequestBody注解的使用场景你都不懂,先回去等通知吧!
使用 场景 注解 通知 RequestBody
2023-06-13 09:12:28 时间
温馨提示: 本文总共3010字,阅读完大概需要3-4分钟,希望您能耐心看完,倘若你对该知识点已经比较熟悉,你可以直接通过目录跳转到你感兴趣的地方,希望阅读本文能够对您有所帮助,如果阅读过程中有什么好的建议、看法,欢迎在文章下方留言或者私信我,您的意见对我非常宝贵,再次感谢你阅读本文。
一: 使用场景
(一)RequestBody注解是我们书写代码时最常遇到的,但是关于它的使用场景和意思你真的懂了?观看本文你会学习到以下的知识点:
- 1、RequestBody注解的作用是什么?
- 2、RequestBody注解是在什么使用需要使用,是不是直接所有的Controller层都添加RequestBody?
二: 定义和用途
(一): RequestBody定义
- 定义: RequestBody注解是SpringMVC下的一个注解,它可以通过HttpMessageConverter来将web请求中的数据绑定到指定方法的参数中,同时还可以结合Valid注解来校验请求参数是否满足条件。
- 2、常见校验注解如: @Null 限制只能为null,@NotNull 限制必须不为null等等(ps:如果大家有有兴趣的话,可以在下方留言,到时候我可以专门出一篇文章)
- 3、用法: 将常用的注解添加到需要检验的pojo实体的属性上,然后在方法处使用: Valid注解使之生效,BindResult适用于收集是否存在不满足条件的错误信息,也就是校验注解中的message,如果属性也是一个实体,且实体中有需要校验的,需要在实体的属性字段上添加Valid注解,使用图例如下:
(二): RequestBody的用途
- 1、很多人都知道RequestBody注解可以将请求中的参数映射到方法的实体属性中,但是,RequestBody注解并不是适用于所有的场景下,是否在参数中添加这个注解,取决于前端请求时参数的编码格式,常见的数据编码格式有以下两种:
- 2、form表单提交,默认的格式: application/x-www-form-urlencoded
- 默认使用Form表单提交时,提交的数据按照 key1=val1&key2=val2 的方式进行编码,key 和 val 都进行了 URL 转码,它可以直接映射到实体的属性中。所以,此时我们并不需要在参数签名添加RequestBody,否则会报([org.springframework.web.HttpMediaTypeNotSupportedException: Content type 'application/x-www-form-urlencoded;charset=UTF-8' not supported])错误。
- 3、Ajax请求,数据的编码格式常用的有两种情况:
- 如果不指定contentType属性,则跟form表单相同,以application/x-www-form-urlencoded编码格式对数据进行编码,让发送到后台,所以此时也不需要添加RequestBody注解。
- 如果ajax方式请求时,指定了contentType为:application/json,则此时请求将以json格式对请求数据进行编码,用来告诉服务端消息主体是序列化后的 JSON 字符串,格式如:{key:valkey:val...},此时后台参数中必须使用RequestBody注解,否则请求参数将无法映射到参数实体的属性中。
- 4、其他一些常用的数据编码格式:
- (1) multipart/form-data:当提交的表单中包含文件的时候,必须设置编码格式为这个(设置方式: 指定表单的enctype属性为:multipart/form-data即可),否则后台无法接受到请求的文件。
- (2) text/xml: 参数已xml格式进行编码,这个格式现在不是很常见。
- 5、常见的知识误区
- (1) enctype: 表单数据提交时使用的编码类型,默认使用"pplication/x-www-form-urlencoded",如果是使用POST请求,则请求头中的content-type指定值就是该值。如果enctype 属性为"multipart/form-data",则以消息的形式发送给服务器。
- (2) enctype为form表单数据的编码格式,Content-type为Http传输的数据的编码格式
- (3) 表单的提交流程:
三: 总结
学习一个知识,不单单只是学会使用,而是去了解知识的前因后果,这样我们记住一个知识才不用死记硬背。千里之行始于足下,希望大家看完文章可以手动实践一下,这样可能印象会更加深刻。
相关文章
- 分布式锁的场景以及实现方案_redis分布式锁使用场景
- ReentrantLock的lock(), tryLock(), tryLock(long timeout, TimeUnit unit), lockInterruptibly() 及使用场景示例
- 使用 Docker 和 Traefik 搭建 GitLab (前篇)
- Redis使用场景
- Rust学习笔记Day23 闭包的使用场景,3种常用闭包类型有哪些
- 【Java 并发编程】CountDownLatch 使用场景示例
- 使用DBOutputFormat把MapReduce产生的结果集导入到mysql中详解大数据
- MySQL Variables time_format 数据库 参数变量解释及正确配置使用
- Win10新功能会根据使用场景向用户提供定制化建议
- 使用Linux实现稳定FTP传输(linuxftp)
- Redis的优雅应用:提升性能的利器(redis的使用场景)
- Systemd 定时器:三种使用场景
- Redis字符集详解:了解Redis支持哪些字符集和对应使用场景(redis字符集)
- MySQL中使用Lock锁的方法及应用场景(mysql中lock锁)
- MySQL使用Limit6进行快速分页查询(mysql中limit6)
- 并发访问Redis使用场景性能提升方案及性能测试(并发读取redis)
- 使用MySQL,如何压缩zip文件(mysql zip怎么)
- 探索Redis高效使用高级应用场景(redis 高级应用场景)
- 使用Redis集群实现订阅发布(redis集群订阅发布)
- MySQL 中使用 CALL 语句调用存储过程的方法概述(mysql 下call的)
- Redis跳跃表探索应用场景(redis跳跃表使用场景)
- Redis订阅 实现实时应用的利器(redis 订阅使用场景)
- 极大改善基于 Redis 框架的应用场景(redis框架使用场景)
- 使用java实现http多线程断点下载文件(二)
- 深入jetty的使用详解
- java线程并发cyclicbarrier类使用示例