1. Content-Type
MediaType,即是Internet Media Type,互聯網媒體類型;也叫做MIME類型,在Http協議消息頭中,使用Content-Type來表示具體請求中的媒體類型信息。
類型格式:type/subtype(;parameter)? type
- 主類型,任意的字符串,如text,如果是*號代表所有;
- subtype 子類型,任意的字符串,如html,如果是*號代表所有;
- parameter 可選,一些參數,如Accept請求頭的q參數, Content-Type的 charset參數。
例如: Content-Type: text/html;charset:utf-8;
常見的媒體格式類型如下:
- text/html : HTML格式
- text/plain :純文本格式
- text/xml : XML格式
- 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 : <form encType=””>中默認的encType,form表單數據被編碼爲key/value格式發送到服務器(表單默認的提交數據的格式)
另外一種常見的媒體格式是上傳文件之時使用的:
- multipart/form-data : 需要在表單中進行文件上傳時,就需要使用該格式
以上就是我們在日常的開發中,經常會用到的若干content-type的內容格式。
2.SpirngMVC和媒體類型
在不設置的情況下,springmvc默認媒體類型是application/x-www-form-urlencoded。(前端ajax不設置content-type,也默認pplication/x-www-form-urlencoded,就可以傳遞)
使用@RequestParam,使用application/x-www-form-urlencoded.
如果想接受application/json,需要加@RequestBody註解,@RequestBody用來處理媒體類型不是application/x-www-form-urlencoded的情況,r如application/json
@RequestMapping中指定consumes,可以用來過濾,比如下面,如果不是json和x-www-form-urlencoded,就無法請求到接口,會報錯有提示信息;(如果不過濾,前後端媒體類型不對應的情況下,請求可以進入接口,只是傳參失敗)
@PostMapping(value = "/login/msg", consumes = {MediaType.APPLICATION_FORM_URLENCODED_VALUE, MediaType.APPLICATION_JSON_UTF8_VALUE, MediaType.APPLICATION_JSON_VALUE})
如果consumes指定application/json ,參數不用@RequestBody,請求可以進入接口,但傳參無法成功。
@RequestBody適合參數是對象、不是基本數據類型的情況,否則會有編碼問題,而且接口參數只有一個基本類型卻使用對象接受,也沒有必要。
轉載前後端媒體類型的實驗:
https://www.jianshu.com/p/b21555b84c89
https://blog.csdn.net/u014044812/article/details/78455053
用postman發起application/json:
https://blog.csdn.net/hao134838/article/details/71311957