SpringMVC學習(十)——SpringMVC與前臺的json數據交互
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數據的交互就總結這麽多。
SpringMVC學習(十)——SpringMVC與前臺的json數據交互