SpringMVC和Content-Type

1.  Content-Type

  MediaType,即是Internet Media Type,互聯網媒體類型;也叫做MIME類型,在Http協議消息頭中,使用Content-Type來表示具體請求中的媒體類型信息。

類型格式:type/subtype(;parameter)? type  

  1. 主類型,任意的字符串,如text,如果是*號代表所有;   
  2. subtype 子類型,任意的字符串,如html,如果是*號代表所有;   
  3. 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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章