天天看點

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

繼續閱讀