补习系列-springboot mime类型处理

了解http常见的mime类型定义;

如何使用springboot 处理json请求及响应;

如何使用springboot 处理 xml请求及响应;

http参数的获取及文件上传下载;

如何获得原始请求的字节流;
6.了解springboot 如何实现内容转换;

一、关于MIME

MIME的全称是Multipurpose Internet Mail Extensions,即多用途互联网邮件扩展,尽管读起来有些拗口,但大多数人可能都知道,
这是HTTP协议中用来定义文档性质及格式的标准。IETF RFC 6838,对HTTP传输内容类型进行了全面定义。
IANA(互联网号码分配机构)是负责管理所有标准MIME类型的官方机构。可以在这里)找到所有的标准MIME

服务器通过MIME告知响应内容类型,而浏览器则通过MIME类型来确定如何处理文档;
因此为传输内容(文档、图片等)设置正确的MIME非常重要。

通常Server会在HTTP响应中设置Content-Type,如下面的响应:

HTTP/1.1 200 OK Server: Golfe2 Content-Length: 233 Content-Type: application/html Date: Sun, 28 Dec 2018 02:55:19 GMT

这表示服务端将返回html格式的文档,而同样客户端也可以在HTTP请求中设置Content-Type以告知服务器当前所发送内容的格式。
如下面的请求体:

POST / HTTP/1.1 Host: localhost:8000 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:50.0) Gecko/20100101 Firefox/50.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Connection: keep-alive Content-Type: application/json Content-Length: 465

这表示客户端会发送application/json格式的数据到服务端,同时应该注意到Accept请求头,这个选项用于告知服务器应该返回什么样的数据格式(由客户端接收并完成解析)。

MIME的格式

type/subtype

这是一个两级的分类,比较容易理解,第一级分类通常包含:

类型 描述
text   普通文本  
image   某种图像  
audio   某种音频文件  
video   某种视频文件  
application   应用数据  
multi-part   复合内容  

而二级类型则非常多,以下是一些常用的MIME:

MIME 描述
audio/wav   wave音频流媒体文件  
audio/webm   webm 音频文件格式  
audio/ogg   ogg多媒体文件格式的音频文件  
audio/mpeg   mpeg多媒体文件格式的音频文件  
image/gif   gif图片  
image/jpeg   jpeg图片  
image/png   png图片  
image/svg+xml   svg矢量图片  
application/json   json格式  
application/xml   xml格式  
application/xhtml+xml   扩展html格式  
application/x-www-form-urlencoded   表单url内容编码  
application/octet-stream   二进制格式  
application/pdf   pdf文档  
application/atom+xml   atom订阅feed流  
multipart/form-data   多文档格式  
text/plain   普通文本  
text/html   html文档  
text/css   css文件  
text/javascript   javascript文件  
text/markdown   markdown文档  
video/mpeg   mpeg多媒体视频文件  
video/quicktime   mov多媒体视频文件  

接下来,看看springboot如何实现几个常见类型格式的处理。

二、springboot-json处理

先看看这样一段代码:

@ResponseBody @PostMapping(value = "/json", consumes= { MediaType.APPLICATION_JSON_UTF8_VALUE }, produces="application/json;charset=UTF-8") public Map<String, Object> jsonIO(@RequestBody Map<String, Object> jsonData) { Map<String, Object> resultData = new HashMap<>(jsonData); resultData.put("resultCode", UUID.randomUUID().toString()); return resultData; }

这是一个Controller层的方法定义,其中@PostMapping将该方法映射到/json路径的POST方法。

consumes = { MediaType.APPLICATION_JSON_UTF8_VALUE } 指定了该方法仅处理application/json的内容格式

produces="application/json;charset=UTF-8" 则表示会在响应头中指定Content-Type=application/json;charset=UTF-8

@RequestBody 指定了将请求的输入通过Json转换为DTO

@ResponseBody 指定将响应对象转换为Json格式输出

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zywxpf.html