HTTP 400 錯誤 復現錯誤 ajax請求後臺數據時有時會報 HTTP 400 錯誤 - 請求無效 (Bad request);出現這個請求無效報錯說明請求沒有進入到後臺服務里;原因:1)前端提交數據的欄位名稱或者是欄位類型和後臺的實體類不一致,導致無法封裝; 2)前端提交的到後臺的數據應該是j ...
HTTP 400 錯誤
復現錯誤
ajax請求後臺數據時有時會報 HTTP 400 錯誤 - 請求無效 (Bad request);出現這個請求無效報錯說明請求沒有進入到後臺服務里;
原因:
1)前端提交數據的欄位名稱或者是欄位類型和後臺的實體類不一致,導致無法封裝;
2)前端提交的到後臺的數據應該是json字元串類型,而前端沒有將對象轉化為字元串類型;
錯誤代碼
$.ajax({ type: "POST", url: "news/newsAdd", data: data, dataType:'json', contentType:"application/json", success: function(data, textStatus, jqXHR) { console.log(data) }, error: function(XMLHttpRequest, textStatus, errorThrown) { if (textStatus && textStatus == "timeout") { confirm("網路超時,請重試!"); } } } );
原因:直接將json作為參數傳入
參考 spring @RequestParam, @RequestBody Map註入註意事項
- @RequestBody需要把所有請求參數作為json解析,因此,不能包含key=value這樣的寫法在請求url中,所有的請求參數都是一個json
- 直接通過瀏覽器輸入url時,@RequestBody獲取不到json對象,需要用java編程或者基於ajax的方法請求,將Content-Type設置為application/json
- @RequestParam參數中包含Map時,不要再寫其他參數了,否則,map都會包含進去。
更正代碼
$.ajax({ type: "POST", url: "news/newsAdd", data: JSON.stringify(data), dataType:'json', contentType:"application/json", success: function(data, textStatus, jqXHR) { console.log(data) }, error: function(XMLHttpRequest, textStatus, errorThrown) { if (textStatus && textStatus == "timeout") { confirm("網路超時,請重試!"); } } } );
參考:JSON.stringify()的用法
@RequestBody的使用
good luck!
鏈接:https://juejin.im/post/5cd0ea2f6fb9a032076c1ca5