SSM:json數據,使用AJAX發送post請求和RequestBody接收參數,報錯415及405的分析和解決

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請求,多注意你的請求頭設置。

引用:https://www.jianshu.com/p/3716212666d6

https://www.cnblogs.com/yeyuchangfeng/p/5623445.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章