POST http://localhost:8080/blog/submitForm 415 (Unsupported Media Type)
POST http://localhost:8080/blog/submitForm 400 (Bad Request)
需求:將一個json字符串傳給後臺,使用ajax,結果實現的時候,前端先是415,後是400報錯。把整個過程錯誤及解決的方法記錄下來,供大家參考。
下圖是我最開始的ajax代碼及後臺controller層接收方法的代碼
$(".layui-btn").click(function () {
var params = {"title":$("#title").val(),"selectCategory":$("#selectCategory").val(),"content":$("#editor_container").val()}]
$.ajax({
type: "post",
url: "/blog/submitForm",
data: params,
dataType: "json",
success: function(result){
}
});
})
@RequestMapping(value = "/submitForm", method = RequestMethod.POST)
@ResponseBody
public String submitForm(@RequestBody JSONObject data){
System.out.println("進入到submitForm");
System.out.println(data.get("title"));
System.out.println(data.get("content"));
return "";
}
運行時415報錯:
POST http://localhost:8080/blog/submitForm 415 (Unsupported Media Type)
原因:缺少contentType:'application/json'
這是因爲後臺是以json對象接收參數,所以你在ajax請求這裏要設置好。
這行代碼是用來告訴服務器,應該用怎樣的方式去處理請求主體。相當於是,你將請求主體中的數據發送出去之後,你還必須告訴服務器,我發送的數據是什麼類型的,這樣服務器才能正確解析請求主體的內容(如果沒有content-type或者content-type的設置是錯的,都會導致瀏覽器無法正確解析請求主體,也就無法對數據做出正確響應了。
加上上面暖說說代碼後,運行報錯提示400:
POST http://localhost:8080/blog/submitForm 400 (Bad Request)
原因:缺少data: JSON.stringify(params),
我現在的代碼傳輸的並不是json類型,而在我的後臺接收,是接收json對象,所以需要對params進行json化。
最終正確的代碼如下
var params = {"title":$("#title").val(),"selectCategory":$("#selectCategory").val(),"content":$("#editor_container").val()}
$.ajax({
type: "post",
url: "/blog/submitForm",
data: JSON.stringify(params),
dataType: "json",
contentType:'application/json',
success: function(result){
}
總結:不管是415還是400報錯,都是“客戶端發送的請求在語法上不正確。”即
所以使用ajax請求,多注意你的請求頭設置。