Http请求中的Content-Type

场景

在前后端接口调试的时候,遇到一个地方比较坑(只能说自己这方面知识不够)。

两个接口同样是使用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对请求体进行解析。


以上就是对这次遇到的坑的简单的学习总结。希望能对遇到类似问题的小伙伴有所帮助。

你可能感兴趣的:(http)