SpringMVC 處理 Ajax 映射

SpringMVC 處理 Ajax 映射

以前,一直以為在 SpringMVC 環(huán)境中,@RequestBody 接收的是一個 Json 對象,一直在調(diào)試代碼都沒有成功,后來發(fā)現(xiàn),其實 @RequestBody 接收的是一個 Json 對象的字符串,而不是一個 Json 對象。然而在 ajax 請求往往傳的都是 Json 對象,后來發(fā)現(xiàn)用 JSON.stringify(data) 的方式就能將對象變成字符串。同時 ajax 請求的時候也要指定 dataType: “json”, contentType: “application/json” 這樣就可以輕易的將一個對象或者 List 傳到 Java 端,使用 @RequestBody 即可綁定對象或者 List。

SpringMVC 返回 Json 數(shù)據(jù)給前端是件很簡單的事,但是 SpringMVC 的 Controller 接收前端 Ajax傳來的 Json 數(shù)據(jù)卻不那么容易,前端和后端都要很小心,有一點不對就會出錯,需要分為 2 種情況處理:
  • GET
  • PUT, POST, DELETE
GET

一、瀏覽器端 Ajax 請求

  • type 為 GET
  • contentType 為 application/json
  • data 是 JSON 對象,不能使用 JSON.stringify(data) 序列化

<script>
$(document).ready(function() {
    $.ajax({
        url:  'ajax-test',
        type: 'GET',
        dataType: 'json',
        contentType: 'application/json',
        data: {age: 10} //JSON.stringify({age: 10})
    })
    .done(function(result) {
        console.log("success");
        console.log(result);
    })
    .fail(function(error) {
        console.log("error");
        console.log(error);
    });
});
</script>

二、服務(wù)器端

  • method 為 RequestMethod.GET
  • 使用 @RequestParam 接收參數(shù)
@RequestMapping(value="ajax-test", method= RequestMethod.GET)
@ResponseBody
public String ajaxTest(@RequestParam int age) {
    System.out.println("==> age: " + age);
    return "{\"success\": true}";
}

服務(wù)器返回的數(shù)據(jù)需要注意,例如 return "{success: true}" 或者 return success,返回的不是一個 JSON 對象的格式,瀏覽器端會調(diào)用 fail(),不過這時看 error 的 status 卻是 200。正確的 JSON 格式為 "{"success": true}",屬性名需要用雙引號括起來。

PUT, POST, DELETE

一、瀏覽器端 AJAX 請求

  • type 為 PUT, POST 或 DELETE
  • contentType 為 application/json
  • data 不是 JSON 對象,需要使用 JSON.stringify(data) 序列化一下
<script>
$(document).ready(function() {
    $.ajax({
        url:  'ajax-test',
        type: 'POST',
        dataType: 'json',
        contentType: 'application/json',
        data: JSON.stringify({age: 10})
    })
    .done(function(result) {
        console.log("success");
        console.log(result);
    })
    .fail(function(error) {
        console.log("error");
        console.log(error);
    });
});
</script>

二、服務(wù)器端

method 為 RequestMethod.PUT (POST, DELETE)
使用 @RequestBody 接收參數(shù)
如果只想取某一個參數(shù),可以使用 Map: @RequestBody Map map
把 Json 數(shù)據(jù)映射為一個 Java Bean: @RequestBody Topic topic



@RequestMapping(value="ajax-test", method= RequestMethod.POST)
@ResponseBody
public String ajaxGet(@RequestBody Map map) {
    System.out.println("==> age: " + map);
    return "{\"success\": true}";
}

參考

SpringMVC @RequestBody接收Json對象字符串

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容