Content-Type詳解
阿新 • • 發佈:2018-11-03
版權宣告:本文為博主原創文章,無需授權即可轉載,甚至無需保留以上版權宣告,轉載時請務必註明作者。
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
}