场景
在前后端接口调试的时候,遇到一个地方比较坑(只能说自己这方面知识不够)。
两个接口同样是使用POST请求,同样是用一个Integer类型参数接收,但是一个能接到值,一个始终接不到值;
经过半天的折腾排查,终于发现问题在http请求头上的Content-Type上。
下面整理一下这方面的知识。
学习
基本概念
Content-Type既会出现在http请求的请求头中,也会出现响应头中。当作为请求头出现时,客户端告诉服务器实际发送的数据类型;当作为响应头时,服务端告诉客户端实际返回的内容的内容类型。
Content-Type中常见的类型
-
以text开头的:
text/html: HTML格式
text/plain:纯文本格式
text/xml: XML格式
-
以image开头的:
image/gif:gif图片格式
image/jpeg:jpg图片格式
image/png:png图片格式
-
以application开头的:
application/xhtml+xml:XHTML格式
application/xml: XML数据格式
application/atom+xml:Atom XML聚合格式
application/json: JSON数据格式
application/pdf:pdf格式
application/msword: Word文档格式
application/octet-stream: 二进制流数据(如常见的文件下载)
application/x-www-form-urlencoded: 中默认的encType,form表单数据被编码为key/value格式发送到服务器(表单默认的提交数据的格式)。
-
另外的常见类型
multipart/form-data : 需要在表单中进行文件上传时,就需要使用该格式。
binary:上传二进制文件
以上就是在日常开发中,经常会遇到的一些content-type格式。
对常用的几个做一些解释
application/json:此类型用来告诉服务端消息主体是序列化后的 JSON 字符串。
application/x-www-form-urlencoded:浏览器原生form表单默认的提交方式(在不设置enctype的情况下)。
multipart/form-data:支持文件的传输。
应用场景
POST方式提交的请求:
1、application/x-www-form-urlencoded:@RequestBody不是必须加的。
2、mutipart/form-data:@RequestBody不能处理这种格式 。
3、其他格式,比如application/json,application/xml等,必须使用@RequestBody来处理 。
@ResquestBody注解可以使http消息转换器根据Content-Type对请求体进行解析。
以上就是对这次遇到的坑的简单的学习总结。希望能对遇到类似问题的小伙伴有所帮助。
|