请求提交方式及mvc常用注解绑定设置
enctype
1:enctype 属性规定在发送到服务器之前应该如何对表单数据进行编码。
默认地,表单数据会编码为 “application/x-www-form-urlencoded”。就是说,在发送到服务器之前,所有字符都会进行编码(空格转换为 “+” 加号,特殊符号转换为 ASCII HEX 值)。
2:服务端通常是根据请求头(headers)中的 Content-Type 字段来获知请求中的消息主体是用何种方式编码,再对主体进行解析。所以 POST 提交数据包含了 Content-Type 和消息主体编码方式两部分
application/x-www-form-urlencoded
1:http中默认的提交方式
2:提交的数据按照 key1=val1&key2=val2 的方式进行编码,key 和 val 都进行了 URL 转码。大部分服务端语言都对这种方式有很好的支持。
@RequestParam
1:Spring中可用@RequestParam(非必须,也可以不加)来处理Content-Type为application/x-www-form-urlencoded数据,修饰的对象可以是基本数据类型和自定义对象。
2:@RequestParam同时适用于get和post,只要Content-Type为application/x-www-form-urlencoded。
multipart/form-data
1:一个常见的 POST 数据提交的方式。我们使用表单上传文件时,必须将 的 enctype设为 multipart/form-data。
2:请求体内容,首先生成了一个 boundary 用于分割不同的字段,为了避免与正文内容重复,boundary 很长很复杂。然后 Content-Type 里指明了数据是以 multipart/form-data 来编码,本次请求的 boundary 是什么内容。消息主体里按照字段个数又分为多个结构类似的部分,每部分都是以 --boundary 开始,紧接着是内容描述信息,然后是回车,最后是字段具体内容(文本或二进制)。如果传输的是文件,还要包含文件名和文件类型信息。消息主体最后以 --boundary-- 标示结束。
application/json
1:application/json作为请求头,用来告诉服务端消息主体是序列化的JSON字符串,除了低版本的IE,基本都支持。服务端有处理JSON的函数,使用不会有任何麻烦。
@RequestBody
1:GET请求中,因为没有HttpEntity,所以@RequestBody并不适用。
2:POST请求中,通过HttpEntity传递的参数,必须要在请求头中声明数据的类型Content-Type,SpringMVC通过使用HandlerAdapter 配置的HttpMessageConverters来解析HttpEntity中的数据,然后绑定到@RequestBody修饰的对象上。