博客原文地址
"Content-Type"
是HTTP請(qǐng)求頭中的一個(gè)標(biāo)頭,用于指示請(qǐng)求或響應(yīng)中包含的實(shí)體的媒體類型。它告訴客戶端如何處理響應(yīng)中的數(shù)據(jù),并通知服務(wù)器客戶端正在發(fā)送的數(shù)據(jù)類型。它可以出現(xiàn)在請(qǐng)求或響應(yīng)標(biāo)頭中。
常見(jiàn)的Content-Type類別
Content-Type
的值通常由一個(gè)媒體類型和一個(gè)可選的字符集組成,例如 “Content-Type: text/html; charset=UTF-8”
常見(jiàn)的 Content-Type 類型:
- text/plain:純文本
- text/html:HTML格式
- application/json:JSON數(shù)據(jù)格式
- application/xml:XML數(shù)據(jù)格式
- application/x-www-form-urlencoded:普通表單格式(鍵值對(duì))
- multipart/form-data:多部分表單格式(用于文件上傳)
- image/jpeg:JPEG圖片格式
- image/png:PNG圖片格式
- audio/mpeg:MPEG音頻格式
- video/mp4:MP4視頻格式
- application/octet-stream:二進(jìn)制流數(shù)據(jù)格式
HTTP規(guī)范還支持其他多種媒體類型,具體取決于實(shí)際需要。當(dāng)客戶端發(fā)送請(qǐng)求時(shí),它必須設(shè)置Content-Type
頭以告知服務(wù)器發(fā)送的數(shù)據(jù)類型。而服務(wù)器返回的響應(yīng)也必須設(shè)置Content-Type
頭以告知客戶端響應(yīng)數(shù)據(jù)的類型。
后端如何接收參數(shù)
SpringBoot后端接收參數(shù)的方式有以下幾種:
-
@PathVariable
:用于接收Get請(qǐng)求通過(guò)拼接url傳遞的參數(shù),例如localhost:7001/param/123 -
@RequestParam
:用于接收Get請(qǐng)求通過(guò)查詢字符串傳遞的參數(shù),例如localhost:7001/param?id=123 -
@RequestBody
:用于接收Post請(qǐng)求通過(guò)請(qǐng)求體
傳遞的參數(shù),可以是JSON或表單格式 -
@RequestHeader
:用于接收請(qǐng)求頭部傳遞的參數(shù)
1.@RequestBody
@RequestBody主要用來(lái)接收前端傳遞給后端的json字符串中的數(shù)據(jù)的(請(qǐng)求體中的數(shù)據(jù)的),對(duì)于get方法來(lái)說(shuō)是沒(méi)有請(qǐng)求體的,所以一般都是使用post請(qǐng)求方式時(shí)使用這種方式傳參。
如果參數(shù)時(shí)放在請(qǐng)求體中,并且Content-Type
為application/json,那么后臺(tái)要用@RequestBody才能接收到;
如果不是放在請(qǐng)求體中的話,那么后臺(tái)接收前臺(tái)傳過(guò)來(lái)的參數(shù)時(shí),要用@RequestParam來(lái)接收,或則形參前 什么也不寫也能接收。
@PostMapping("/example")
public String handleFormSubmit(@RequestBody User user) {
// 處理表單提交數(shù)據(jù)
}
@RequestBody會(huì)自動(dòng)將請(qǐng)求體中的json數(shù)據(jù)封裝進(jìn)User實(shí)體類中。json的key和實(shí)體類的屬性名一一對(duì)應(yīng)。
2.@RequestParam
@RequestParam注解通常用于接收前端傳遞的URL參數(shù)或表單參數(shù)。這些參數(shù)可以通過(guò)HTTP GET請(qǐng)求的URL參數(shù)或HTTP POST請(qǐng)求的表單參數(shù)進(jìn)行傳遞。
1.Query參數(shù):即URL中的查詢參數(shù),例如
http://example.com/path?param1=value1¶m2=value2
在這種情況下,@RequestParam注解會(huì)將查詢參數(shù)的值與方法參數(shù)進(jìn)行綁定。例如:
@GetMapping("/example")
public String example(@RequestParam("param1") String param1, @RequestParam("param2") String param2) {
// method body
}
2.Form表單參數(shù):即表單提交時(shí)的參數(shù),例如通過(guò)application/x-www-form-urlencoded格式以Post
方式的提交的表單。在這種情況下,@RequestParam注解會(huì)將表單參數(shù)的值與方法參數(shù)進(jìn)行綁定。例如:
@PostMapping("/example")
public String example(@RequestParam("param1") String param1, @RequestParam("param2") String param2) {
// method body
}
另外,如果通過(guò)application/x-www-form-urlencoded格式提交的表單,也可以將其直接封裝成Java類,此時(shí)參數(shù)前不需要加任何注解即可。
@PostMapping("/example")
public String example(Param param) {
// method body
}
注:如果是通過(guò)json
傳遞的表單數(shù)據(jù),則必須加@RequestBody
才能將其轉(zhuǎn)成Java類
需要注意的是,使用@RequestParam注解時(shí)需要指定參數(shù)的名稱,這個(gè)名稱要和前端傳遞參數(shù)時(shí)的名稱一致。如果前端傳遞參數(shù)時(shí)使用了不同的名稱,可以通過(guò)@RequestParam注解的value屬性或name屬性來(lái)指定正確的參數(shù)名稱。
post和get提交表單的區(qū)別
- 對(duì)于HTTP GET請(qǐng)求提交的表單,表單參數(shù)通常會(huì)被編碼到URL中,形成類似于以下的URL
http://example.com/api/example?id=123&name=John
這種直接使用@RequestParam接收參數(shù),但是如果參數(shù)較多,可以使用Java類接收
//使用@RequestParam接收單個(gè)參數(shù)
@PostMapping("/example")
public String example(@RequestParam("param1") String param1, @RequestParam("param2") String param2) {
// method body
}
//使用Java類接收參
@PostMapping("/example")
public String example(User user) {
// method body
}
public class User{
String id;
String name;
}
- 對(duì)于post提交的表單,格式可以有多種,這里主要說(shuō)一下
application/x-www-form-urlencoded
和application/json
兩種格式
(1)"application/x-www-form-urlencoded"格式
這是一種常用的表單格式,也是瀏覽器默認(rèn)
使用的表單格式。在這種格式下,表單數(shù)據(jù)會(huì)被放置在HTTP請(qǐng)求的正文中,也就是請(qǐng)求體中。正文內(nèi)容由鍵值對(duì)組成,每個(gè)鍵值對(duì)之間用&符號(hào)連接例如:
POST /example HTTP/1.1
Host: www.example.com
Content-Type: application/x-www-form-urlencoded
id=123&name=John&age=20
接收這種格式的參數(shù),可以使用@RequestParam接收,也可以使用Java類接收,因?yàn)槭莂pplication/x-www-form-urlencoded格式,使用Java類不需要加@RequestBody,和上面接收get表單方法一致。
(2)"application/json"格式
這是一種常用的數(shù)據(jù)交換格式,它使用JSON格式來(lái)描述數(shù)據(jù)。在這種格式下,表單數(shù)據(jù)會(huì)被序列化為JSON字符串,并放置在HTTP請(qǐng)求的正文中。例如:文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-680100.html
{
"id": 123,
"name": "John",
"age": 20
}
可以使用@RequestBody注解來(lái)接收這種格式的表單數(shù)據(jù),并將其反序列化為Java對(duì)象。此時(shí)Java對(duì)象前必須加@RequestBody注解才行。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-680100.html
到了這里,關(guān)于請(qǐng)求頭content-type的不同格式后端應(yīng)該如何接收的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!