一直以為在SpringMVC環境中,@RequestBody接收的是一個json對象,調試代碼時沒有成功,后來才發現,其實 @RequestBody接收的是一個json字符串,而不是一個json對象。
解決方案:用JSON.stringify(data)的方式將對象變成字符串,同時ajax請求的時候也要指定dataType: "json",contentType:"application/json" ,這樣就可以輕易的將一個對象傳到Java端,使用@RequestBody即可綁定對象。
contentType:默認為"application/x-www-form-urlencoded",該默認值適合大多數應用場合。"application/json"表明參數是json字符串。
dataType: 預期服務器返回的數據類型。可用的類型如下:
- xml:返回XML文檔,可用JQuery處理;
- html:返回純文本HTML信息;包含的script標簽會在插入DOM時執行;
- script:返回純文本JavaScript代碼,不會自動緩存結果,除非設置了cache參數,注意在遠程請求時(不在同一個域下),所有post請求都將轉為get請求;
- json:返回JSON數據;
- jsonp:JSONP格式。使用SONP形式調用函數時,例如myurl?callback=?,JQuery將自動替換后一個 “?”為正確的函數名,以執行回調函數;
- text:返回純文本字符串。
js代碼:
$.ajax({ url : context + "/service/message/saveZbl", data :JSON.stringify({"uuid":uuid,"tableName":tableName,"columnName":columnName}), dataType: "json", contentType:"application/json", type:"POST", success : function(data){ if(data > 0){ dialog.close(); dialog.remove(); return false; }else{ $.sticky( "保存失敗", { style : 'success', autoclose : 1000, position : 'center' }); } } });
Java代碼:
@RequestMapping(value = "/saveZbl") @ResponseBody public int saveZbl(HttpServletRequest request,@RequestBody JcZntxZbb zbb) { return 1; }
