(一)RequestBody注解是我们书写代码时最常遇到的,但是关于它的使用场景和意思你真的懂了?观看本文你会学习到以下的知识点:
(一): RequestBody定义
(二): 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请求,数据的编码格式常用的有两种情况:
(1): 如果不指定contentType属性,则跟form表单相同,以application/x-www-form-urlencoded编码格式对数据进行编码,让发送到后台,所以此时也不需要添加RequestBody注解。
(2): 如果ajax方式请求时,指定了contentType为:application/json,则此时请求将以json格式对请求数据进行编码,用来告诉服务端消息主体是序列化后的 JSON 字符串,格式如:{key:valkey:val...},此时后台参数中必须使用RequestBody注解,否则请求参数将无法映射到参数实体的属性中。
3、其他一些常用的数据编码格式:
(1) multipart/form-data:当提交的表单中包含文件的时候,必须设置编码格式为这个(设置方式: 指定表单的enctype属性为:multipart/form-data即可),否则后台无法接受到请求的文件。
(2) text/xml: 参数已xml格式进行编码,这个格式现在不是很常见。
4、常见的知识误区:
(1) enctype: 表单数据提交时使用的编码类型,默认使用"pplication/x-www-form-urlencoded",如果是使用POST请求,则请求头中的content-type指定值就是该值。如果enctype 属性为"multipart/form-data",则以消息的形式发送给服务器。
(2) enctype为form表单数据的编码格式,Content-type为Http传输的数据的编码格式
(3) 表单的提交流程:
不积跬步,无以至千里;不积小流,无以成江海。今天播种努力的种子,总会有一天发芽!