1. 程式人生 > >SpringMVC學習(十)——SpringMVC與前臺的json數據交互

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

TP sso 加載 eas ping watermark 客戶端 class post

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數據交互