(轉)SpringMVC學習(十)——SpringMVC與前台的json數據交互


http://blog.csdn.net/yerenyuan_pku/article/details/72514022

json數據格式在接口調用中、html頁面中比較常用,json格式比較簡單,解析也比較方便,所以使用很普遍。在SpringMVC中,也支持對json數據的解析和轉換,這篇文章主要總結一下在SpringMVC中如何和前台交互json數據。

兩種交互形式

SpringMVC和前台交互主要有兩種形式,如下圖所示: 

可以看出,前台傳過來的方式有兩種,一種是傳json格式的數據過來,另一種就是在url的末尾傳普通的key/value串過來,針對這兩種方式,在Controller類中會有不同的解析,但是在Controller類中返回的json格式的數據都是一樣的。下面來具體分析一下SpringMVC是如何與前台進行json數據的交互的。在講之前先認識兩個注解。

@RequestBody注解

@RequestBody注解用於讀取http請求的內容(字符串),通過SpringMVC提供的HttpMessageConverter接口將讀到的內容轉換為json、xml等格式的數據並綁定到Controller類方法的參數上。 
本例子應用:@RequestBody注解實現接收http請求的json數據,將json數據轉換為java對象。如下: 

@ResponseBody注解

@ResponseBody注解用於將Controller類的方法返回的對象,通過HttpMessageConverter接口轉換為指定格式的數據如:json、xml等,通過Response響應給客戶端。 
本例子應用:@ResponseBody注解實現將Controller類方法返回對象轉換為json響應給客戶端,如下: 


經過我如此細致地講解,想必大家已認識到這兩個注解的意思了。好了,下面來具體分析一下SpringMVC是如何與前台進行json數據的交互的。

環境的准備

加載json的jar包

SpringMVC默認用MappingJacksonHttpMessageConverter對json數據進行轉換,需要加入jackson的包,又因為SpringMVC3和SpringMVC4針對json交互的jar包有區別,我用的是SpringMVC4,需要導入如下三個jar包: 
 
讀者千萬不要忘了導入jQuery的類庫,因為我是使用jQuery的ajax提交json串的,就像下圖這樣: 

配置json轉換器

配置json轉換器有兩種方式,如果是配置了注解適配器org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter的話,需要在該適配器中配置json轉換器,如下:

<!-- 用於將對象轉換為 JSON --> <bean id="stringConverter" class="org.springframework.http.converter.StringHttpMessageConverter"> <property name="supportedMediaTypes"> <list> <value>text/plain;charset=UTF-8</value> </list> </property> </bean> <bean id="jsonConverter" class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"></bean> <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"> <property name="messageConverters"> <list> <ref bean="stringConverter" /> <ref bean="jsonConverter" /> </list> </property> </bean> 

但是如果使用<mvc:annotation-driven />注解驅動的話就不用以上的配置了,默認已經配好了。建議使用這種,比較方便。

json交互的測試

這里,我使用jQuery的ajax提交json串,對輸出的json結果進行解析。前台的程序如下:

<button onclick="sendJson()">json數據交互測試</button> <script type="text/javascript"> function sendJson() { $.ajax({ type:"post", url:"${pageContext.request.contextPath }/item/json_test.action", data:'{"id":"1","name":"電冰箱","price":"1999"}', contentType:"application/json;charset=utf-8", success:function(data) { alert(data.id + ":" + data.name); } }); } </script>

那么前台itemList.jsp頁面的內容就應改造為: 

接着編輯ItemController類,並在該類中編寫如下方法:

// JSON數據交互 // @RequestBody:接收json數據並轉換成pojo對象 // @ResponseBody:響應json數據,把pojo對象轉換成json數據並響應 @RequestMapping("/json_test") @ResponseBody public Items jsonTest(@RequestBody Items items) { return items; }

由於前台傳的是id、name和price三個屬性,所以在后台就用Items類來接收了,這個類中也有這三個屬性。重點是@RequestBody注解,它是將前台傳過來的json串轉換成items對象,然后再將該對象return回去,通過@ResponseBody注解將items對象轉成json格式返回給前台。這樣前台接收到了后就可以解析了。我們看一下測試的結果: 

響應的結果,null表示空值而已,這里就返回了原對象,也就只有id、name和price屬性。 

springmvc與前台json數據的交互就總結這么多。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM