axios
使用不再說明,直指常見問題元兇:
1.get(url[, config])
和post(url[, data[, config]])
,注意參數(shù)
get是在config中設(shè)置params{params:{...} }
post是設(shè)置data字段
詳細(xì)看文檔(在post里面用params會(huì)把參數(shù)放到url里的)
2.headers中的Content-Type
,視乎請(qǐng)求方式(GET/POST等)的不同坊秸,有不同默認(rèn)值和處理方式
3.post方式中
//
data
是作為請(qǐng)求主體被發(fā)送的數(shù)據(jù)
// 只適用于這些請(qǐng)求方法 'PUT', 'POST', 和 'PATCH'
// 在沒有設(shè)置transformRequest
時(shí),必須是以下類型之一:
// - string, plain object, ArrayBuffer, ArrayBufferView, URLSearchParams
// - 瀏覽器專屬:FormData, File, Blob
// - Node 專屬: Stream
content-type默認(rèn)情況下將被正確設(shè)置。其他不合情景的類型由JSON.stringify()處理為字符串至会,且content-type為application/json
。手動(dòng)設(shè)置content-type并不影響這個(gè)處理邏輯谱俭。
對(duì)于data是一個(gè)普通對(duì)象奉件,想以application/x-www-form-urlencoded
正確post傳輸(即html表單的post提交方式)
簡易解決方法:
(1)axios.post('/api/login', 'a=1&b=2' )
我們自己直接寫成符合的字符串
(2)使用URLSearchParams
或者qs庫進(jìn)行處理,沒啥好辦法了昆著。
4.get方式中
//
params
是即將與請(qǐng)求一起發(fā)送的 URL 參數(shù)
// 必須是一個(gè)無格式對(duì)象(plain object)或 URLSearchParams 對(duì)象
get方式通常無需指定content-type县貌,因此控制臺(tái)中可能看不到application/x-www-form-urlencoded
這個(gè)。但這里無論是plain object還是URLSearchParams對(duì)象凑懂,都不會(huì)被JSON.stringify()處理煤痕,最終均以a=1&b=2
這種形式放入url中進(jìn)行提交。
springboot后臺(tái)
1.@RequestParam 可正確注入Content-Type為application/x-www-form-urlencoded
和multiple/form-data
傳輸?shù)膮?shù)征候。另外由于約定優(yōu)于配置杭攻,該注解可省略
2.@RequestBody 可正確注入Content-Type為application/json
傳輸?shù)膮?shù)。此時(shí)寫一個(gè)與該json對(duì)應(yīng)的java類即可對(duì)應(yīng)注入疤坝。不想多寫一個(gè)java類的話可以直接用Map<String,Object>
代替兆解,反正有鍵值對(duì)這樣的結(jié)構(gòu)就行。
3.springboot根據(jù)情況自行判斷該參數(shù)到底用@RequestParam還是@RequestBody注入跑揉,可以偷懶锅睛。出現(xiàn)問題時(shí),請(qǐng)手動(dòng)指明
4.前端發(fā)來multipart/form-data历谍,含有文件
一個(gè)文件時(shí):public String upload (MultipartFile file)
现拒,提醒,參數(shù)file要對(duì)應(yīng)前端發(fā)來的參數(shù)名望侈,否則手動(dòng)使用@RequestParam指明
多個(gè)文件時(shí)用數(shù)組/集合存:public String upload (MultipartFile[] files)