相關技術
SpringMVC
vue-resource
問題描述
使用ajax向后端發(fā)送POST請求成功辫封,但是改用vue-resource發(fā)送POST請求一直出現(xiàn)400 Bad Request 錯誤,代碼及錯誤如下:
AJAX正常請求
vue-resource異常請求
可以看出AJAX請求發(fā)送200 OK廉丽,而vue-resource請求發(fā)送400 Bad Request倦微。
具體原因可以看出來在請求頭中,前者的Content-Type=application/x-www-form-urlencoded正压,導致請求體中的數(shù)據(jù)格式為Form Data:key1=val1&key2=val2欣福;而后者的Content-Type=application/json,導致請求體中的數(shù)據(jù)格式為Request PayLoad:?{key1:val1,key2:val2}焦履。顯然服務端接收第一種參數(shù)格式而拒絕第二種拓劝,所以拋出400狀態(tài)碼。
所以要做的就是將vue-resource中的請求體中的參數(shù)格式指定為Form Data即可嘉裤。
emulateJSON
boolean類型 默認值為false
用途:將request body以application/x-www-form-urlencoded content type發(fā)送
在發(fā)送POST請求的options選項中添加 {emulateJSON:true} 即可:
總結
請求頭中的Content-Type字段會說明實體主體內(nèi)對象的媒體類型郑临。AJAX默認的Content-Type=application/x-www-form-urlencoded;vue-resource的POST請求默認的Contnet-Type=application/json屑宠;通過指定emulateJSON的值來指定vue-resource Content-Type的值厢洞。
另外,個人覺得寫得非常好的HTTP的POST提交的四種常見消息主體格式的博客推薦給大家典奉。