1. 程式人生 > >springmvc4整合AJAX使用@ResponseBody註解返回JSON資料格式

springmvc4整合AJAX使用@ResponseBody註解返回JSON資料格式

    一、在使用springMVC4+Hibernate4整合框架,需要使用到@ResponseBody註解來配合AJAX的使用,

但依靠springMVC3的配置和jar包可能會出現

    1. java.lang.ClassNotFoundException: com.fasterxml.jackson.core.Jso;

    2. java.lang.IllegalStateException: LifecycleProcessor not initialized - call 'refresh' before ;

等的問題,所以需要配置新增的jar包來實現該功能;

    新的jar包有4個包括:jackson-jr-all-2.4.3.jar;jackson-annotations-2.6.0.jar;jackson-core-2.6.0.jar;jackson-databind-2.6.0.jar;

    二、在此順便講一下@ResponseBody的作用:

    1.使用了@ResponseBody能夠直接將controller返回的bean物件或map物件等自動進行json或xml格式的轉換,無需再使用JSONObject或者

response.setContentType("application/json")+PrintWriter來將返回的bean、String、map物件轉換成JSON格式,再輸出到頁面上;

    即:

    使用之前,普通的配合AJAX需要controller這樣返回JSON資料格式:

@ResponseBody註解的使用方式如下,而使用@ResponseBody之後配合AJAX可以controller這樣返回JSON格式資料:

    2. 還有使用@ResponseBody的一個特別之處就是,在使用此註解之後不會再走返回檢視處理器路徑,而是直接將資料寫入到輸入流中,

等同於使用response.getWriter().print(data)輸出到頁面上;

    三、再連結講一下,當需要使用@ResponseBody註解時,該如何進行配置呢?

使用springmvc框架時,第一次使用@ResponseBody註解的時候,可能會試著直接在controller的方法上使用這個註解來返回JSON格式資料,

但是這樣往往會得不到預期的效果,會出現很多的exception錯誤。這種情況是正常的,因為你還沒有配置好使用這個@ResponseBody註解的

相關jar包和xml。

    1. 對於springmvc4版本的話,整合AJAX非同步更新操作和返回JSON資料,使用@ResponseBody註解的話,相關需要的jar包就是上面的那4個,

下載的連結在部落格最後;

    2. 對於xml配置的話,也不是很複雜,只需要在springmvc-servlet裡面加上以下的配置即可:

    <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
        <property name="messageConverters">
            <list>
                <ref bean="mappingJackson2HttpMessageConverter" />
            </list>
        </property>
    </bean>
    <bean id="mappingJackson2HttpMessageConverter" 
    		class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
        <property name="supportedMediaTypes">
            <list>
            	<value>application/json;charset=UTF-8</value>
                <value>text/html;charset=UTF-8</value>
                <value>text/json;charset=UTF-8</value>    
            </list>
        </property>
     </bean>