1. 程式人生 > >Content-Type詳解

Content-Type詳解

版權宣告:本文為博主原創文章,無需授權即可轉載,甚至無需保留以上版權宣告,轉載時請務必註明作者。
https://blog.csdn.net/weixin_43453386/article/details/83512451

Content-Type詳解

一、MediaType

MediaType,即是Internet Media Type,網際網路媒體型別;也叫做MIME型別。
在Http協議訊息頭中,使用Content-Type來表示具體請求中的媒體型別資訊。

二、Content-Type格式

1、型別格式

type/subtype(;parameter)? type

引數 說明
type 主型別,任意的字串,如text,如果是*號代表所有
subtype 子型別,任意的字串,如html,如果是*號代表所有;
parameter 可選,一些引數,如Accept請求頭的q引數, Content-Type的 charset引數

2、常見的媒體格式型別

型別 說明
text/html HTML格式
ext/plain 純文字格式
text/xml XML格式
image/gif gif圖片格式
image/jpeg jpg圖片格式
image/png png圖片格式
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表單資料被編碼為key/value格式傳送到伺服器(表單預設的提交資料的格式)
multipart/form-data 在表單中進行檔案上傳時

3、Content-Type 和 Accept 區別

Http報頭:通用報頭,請求報頭,響應報頭和實體報頭。

請求方的http報頭結構:通用報頭,請求報頭,實體報頭

響應方的http報頭結構:通用報頭,響應報頭,實體報頭

參考連結:HTTP中的Content-Type和Accept

  • 區別:
Accept Content-Type
請求頭 實體頭
傳送端(客戶端)希望接受的資料型別 傳送端(客戶端|伺服器)傳送的實體資料的資料型別
  • 示例:

Accept:text/xml; ——》代表客戶端希望接受的資料型別是xml
Content-Type:text/html; ——》代表傳送端傳送的資料格式是html

三、Content-Type用法

1.headers

指定request中必須包含某些指定的header值,才能讓該方法處理請求
參考連結:@RequestMapping的引數和用法

//Accept=application/json :表示客戶端希望接受的資料型別是json
@RequestMapping(value = "/test/ContentType", headers = "Accept=application/json")  
public void test1(HttpServletResponse response) throws IOException {  
    //表示響應的內容區資料的媒體型別為json格式,且編碼為utf-8(客戶端應該以utf-8解碼)  
    response.setContentType("application/json;charset=utf-8");  
    //寫出響應體內容  
    String jsonData = "{\"username\":\"zhang\", \"password\":\"123\"}";  
    response.getWriter().write(jsonData);  
}


//content-type =application/json :表示客戶端傳送的資料格式是json
@RequestMapping(value = "/test/ContentType", headers = {"content-type = application/json"})  
public void test2(@RequestBody Pet pet) throws IOException {  
    // TODO
}


2.consumes

//僅處理request Content-Type為“application/json”型別的請求
@RequestMapping(value = "/test/produces", method = RequestMethod.POST, consumes="application/json")  
public void test(@RequestBody Pet pet, Model model) {      
    // TODO
}

//處理request Content-Type,定義的2種類型的請求
@RequestMapping(consumes = {"application/json","application/x-www-form-urlencoded"})
public void test2(@RequestBody Pet pet, Model model) {      
    // TODO
}

//處理request Content-Type中,除了以下2種類型的請求
@RequestMapping(consumes = {"!application/json","!application/x-www-form-urlencoded"})
public void test3(@RequestBody Pet pet, Model model) {      
    // TODO
}

3.produces

//返回json資料 && 字元編碼為utf-8
@RequestMapping(value = "/test/consumes", method = RequestMethod.POST, produces="application/json;charset=utf-8")    
@ResponseBody    
public Pet test3(@PathVariable String petId, Model model) {       
    // TODO
} 

四、參考連結

1.HTTP中的Content-Type和Accept

2.@RequestMapping的引數和用法