您好,登錄后才能下訂單哦!
小編給大家分享一下Spring中ajax與后臺傳輸數據的示例,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
最近寫ajax與后臺傳輸數據的時候碰到了一個問題,我想ajax以json的方式把數據傳輸個后臺,后臺用map的形式接收,然后也以map的形式傳回數據。可是一直碰到前臺報(*)(@415 Unsupported media type) 不支持媒體類型錯誤,然后經過查閱資料終于解決了。這里總結下關于ajax與后臺傳輸數據的幾種方式,上面問題的解決方法在本文最后。
<code> var id = $("#id").val(); $.ajax({ type: "POST", url: "/IFTree/people/getPeopleById/"+id,//參數放在url中 success:function(data){ alert(data); }, error:function(xhr, textStatus, errorThrown) { } }); </code>
<pre><code>
@RequestMapping(value = "getPeopleById/{id}") @ResponseBody public Map<String, Object> getPeopleById(@PathVariable("id") int id) { //@PathVariable("id") 如果參數名與url定義的一樣注解可以不用定義("id") System.out.println(id); Map<String, Object> map = new HashMap<String, Object>(); return map; } }
</code></pre>
<code> var id = $("#id").val(); $.ajax({ type: "POST", url: "/IFTree/people/getPeopleById", data: {id:id}, success:function(data){ alert(data.result); }, error:function(xhr, textStatus, errorThrown) { } }); </code>
<pre><code>
@RequestMapping(value = "getPeopleById") @ResponseBody public Map<String, Object> getPeopleById(HttpServletRequest request,HttpServletResponse response) { int id = Integer.valueOf(request.getParameter("id")); Map<String, Object> map = new HashMap<String, Object>(); return map; }
</code></pre>
@RequestMapping(value = "getPeopleById") @ResponseBody public Map<String, Object> getPeopleById(HttpServletRequest request,HttpServletResponse response) { int id = Integer.valueOf(request.getParameter("id")); // 這里得到的都是字符串得轉換成你需要的類型 Map<String, Object> map = new HashMap<String, Object>(); return map; }
</code>
<code> var id = $("#id").val(); $.ajax({ type: "POST",//請求類型 timeout:10000, //設置請求超時時間(毫秒) async:ture,//是否為異步請求 cache:false,//是否從瀏覽器緩存中加載請求信息。 url: "/IFTree/people/getPeopleById", contentType: "application/json;charset=UTF-8",//提交的數據類型 data: JSON.stringify({id:id}),//這里是把json轉化為字符串形式 dataType: "json",//返回的數據類型 success:function(data){ $("#name").val(data.result.name); }, error:function(xhr, textStatus, errorThrown) { } }); }); </code>
<pre><code>
@RequestMapping(value = "getPeopleById", produces = "application/json") @ResponseBody public Map<String, Object> getPeopleById(@RequestBody Map<String, Object> body){ System.out.println(""+body.get("id")); People people = peopleService.getPeopleById(Integer.valueOf((String)body.get("id"))); Map<String, Object> map = new HashMap<String, Object>(); map.put("result", people); return map; }
</code></pre>
@RequestBody
該注解首先讀取request請求的正文數據,然后使用默認配置的HttpMessageConverter進行解析,把數據綁定要對象上面,然后再把對象綁定到controllor中的參數上。
@ResponseBody
該注解也是一樣的用于將Controller的方法返回的對象,通過的HttpMessageConverter轉換為指定格式后,寫入到Response對象的body數據區。
<code>
<!-- spring MVC提供的適配器 spring默認加載 (如果不修改默認加載的4類轉換器,該bean可不配置)--> <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"> <property name="messageConverters"> <!-- 該適配器默認加載以下4類轉換器--> <list> <bean class="org.springframework.http.converter.BufferedImageHttpMessageConverter" /> <bean class="org.springframework.http.converter.ByteArrayHttpMessageConverter" /> <bean class="org.springframework.http.converter.xml.SourceHttpMessageConverter" /> <bean class="org.springframework.http.converter.xml.XmlAwareFormHttpMessageConverter" /> <bean class="org.springframework.http.converter.StringHttpMessageConverter" /> <bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"> <property name="supportedMediaTypes"> <list> <value>application/json;charset=UTF-8</value> </list> </property> </bean><!--這里配置了json轉換器支持的媒體類型--> </list> </property> </bean>
</code>
ByteArrayHttpMessageConverter: 負責讀取二進制格式的數據和寫出二進制格式的數據;
StringHttpMessageConverter: 負責讀取字符串格式的數據和寫出二進制格式的數據;
ResourceHttpMessageConverter:負責讀取資源文件和寫出資源文件數據;
FormHttpMessageConverter: 負責讀取form提交的數據
MappingJacksonHttpMessageConverter: 負責讀取和寫入json格式的數據;
SouceHttpMessageConverter: 負責讀取和寫入 xml 中javax.xml.transform.Source定義的數據;
Jaxb2RootElementHttpMessageConverter: 負責讀取和寫入xml 標簽格式的數據;
AtomFeedHttpMessageConverter: 負責讀取和寫入Atom格式的數據;
RssChannelHttpMessageConverter: 負責讀取和寫入RSS格式的數據;
項目里面我用到的只有json轉換器,所以要導入關于json的包(maven):
<code> <dependency> <groupId>org.codehaus.jackson</groupId> <artifactId>jackson-core-asl</artifactId> <version>1.9.11</version> </dependency> <dependency> <groupId>org.codehaus.jackson</groupId> <artifactId>jackson-mapper-asl</artifactId> <version>1.9.11</version> </dependency> </code>
同樣controller中參數也能以實體類的方式接收數據,
開始一直報(415 Unsupported media type)的錯誤是因為配置文件沒有寫對也沒導入相應的包
以上是“Spring中ajax與后臺傳輸數據的示例”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。