標籤:tty 瀏覽器 導致 .com delete rest 區分 var mapping
1、需要在web.xml中開啟put,和delete的支援
<!-- 瀏覽器不支援put,delete等method,由該filter將/xxx?_method=delete轉換為標準的http delete方法 --> <filter> <filter-name>hiddenHttpMethodFilter</filter-name> <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class> </filter> <filter-mapping> <filter-name>hiddenHttpMethodFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
2、務必匯入jackson的jar包
3、jqery發送AJax到springmvc,需要的是json標準格式的字串,而非json對象,所以得先轉成字串,涉及的發送AJax的幾處坑如下:
SpringMVC發送ajax 一般採用$.ajax()方法進行資料發送,主要是因為$.post()方法發送資料的形式得是json對象格式,而$.ajax()方法可以發送字串形式json,,另外使用springmvc的ajax功能千萬記得匯入jackson的2.4版本以上的包,不然報406的錯誤,採用$.ajax()方法需要注意的幾個坑是:
$.ajax({ url: "${pageContext.request.contextPath}/test.action", data: JSON.stringify(obj), //這也是一處坑,SpringMVC要求為嚴格形式的json字串,必須保證json串不能出現畸形 contentType : ‘application/json;charset=utf-8‘,//這也是一處坑,這裡指定發送到伺服器端的報文內容形式,預設的urlencoder的,無法傳送json,所以傳json時必須指定contentType type:"post", dataType:"json", //這裡是一處坑,dataType為指定響應回來的資料類型,必須是xml,json,text,html中的一種,不能寫錯,寫錯後會造成jqery架構把返回資料轉為指定格式失敗,而從導致success函數無法調用,但是服務端能接收到資料,也能正常返回,而js端解析資料出錯而造成卡死了,但是並沒有錯誤顯示 success:function(data) { } }); |
服務端把json資料裝配成pojo對象,是通過@RequestBody註解來實現的,而把pojo對象返回成json對象是通過註解@ResponseBody來實現的,都得一一寫上,就算返回的是字串@ResponseBody也不能漏掉 @RequestMapping("/test.action") public @ResponseBody User func1(@RequestBody User u) { return User; } |
|
其中,發送AJax的contentType 為發送過去的格式,dataType為接收時讓jqery轉換的格式,一定得指定讓其可以正常轉換的格式才行,不然不會報錯,但是也沒有成功的回調響應
4、代碼實現:
①、服務端,預設可以不寫produces={"application/json;charset=utf-8"},produces是指定響應回用戶端的json格式編碼,除非返回格式解析亂碼:
@RequestMapping(value="/submit",method=RequestMethod.DELETE,produces={"application/json;charset=utf-8"}) public @ResponseBody User submit1(@RequestBody User u) { System.out.println(u); return new User("004","jerry"); } @RequestMapping(value="/submit",method=RequestMethod.POST) public @ResponseBody User submit2( @RequestBody User u) { System.out.println(u); return new User("003","jerry"); }
②、用戶端:
<script type="text/javascript">$(function() {$("#btn1").click(function() {var obj = {uid : 1,name : ‘jerry1‘};$.ajax({url : ‘${pageContext.request.contextPath}/submit?_method=delete‘,type : ‘post‘,data : JSON.stringify(obj),contentType : ‘application/json;charset=utf-8‘,dataType : ‘json‘,success : function(data) {alert(data.uid);}});});$("#btn2").click(function() {var obj = {uid : 2,name : ‘jerry2‘};$.ajax({url : ‘${pageContext.request.contextPath}/submit‘,type : ‘post‘,data : JSON.stringify(obj),contentType : ‘application/json;charset=utf-8‘,dataType : ‘json‘,success : function(data) {alert(data.uid);}});});});</script>
用戶端通過url參數區分RestFull方法,服務端通過RequestMethod來進行限制
SpringMVC實現AJax以及RestFull分格