1. 程式人生 > 實用技巧 >SpringBoot踩坑記(HTTP 400 錯誤)

SpringBoot踩坑記(HTTP 400 錯誤)

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