SpringMVC實現AJax以及RestFull分格

來源:互聯網
上載者:User

標籤: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分格

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.