springmvc+json

1.在寫我的springmvc demo時,由於要向前臺返回相關信息,於是設置了@ResponseBody,但是要把對象轉換成json格式,我卻沒有在xml文件裏配置,所以報如下錯誤:
HttpMediaTypeNotAcceptableException: Could not find acceptable representation。
於是採用默認配置,即曾經號稱“史上最快json”的Jackson
    <!-- 啓用spring mvc 註解-->
    <mvc:annotation-driven>
        <!-- 啓動JSON格式的配置 -->
        <mvc:message-converters>  
        <bean id="jsonConverter" class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">
            <property name="supportedMediaTypes">  
                <list>  
                    <value>text/html;charset=UTF-8</value>  <!-- 避免IE出現下載JSON文件的情況 -->
                </list>  
            </property>    
        </bean>  
        </mvc:message-converters>
    </mvc:annotation-driven>

2.運行之後報錯:Could not find acceptable representation

原因是我忘記加入了jackson的兩個包:jackson-core-asl-1.9.13和jackson-mapper-asl-1.9.13

3.運行之後又報錯:元素 'mvc:annotation-driven' 必須不含字符或元素信息項 [子級], 因爲該類型的內容類型爲空。發現我的xml裏面的mvc命名空間中xsd版本是3.0的,但是我用的是4.0,後來想想去掉這個版本序號,默認的版本是什麼呢?就試了下,好像是默認最新的(可以在myeclipse裏面打開該鏈接,查看xsd文件)

4.在網上查找資料時,看到了有關fastjson的文章,就看了看,發現網上對fastjson褒貶不一,褒的是fastjson就像它名字一樣,序列化和反序列化速度很快,還有人專門做了測試;貶的是fastjson是阿里巴巴的溫少寫的,相關文檔較少,遇到問題解決起來比較困難。但是由於我對阿里巴巴的執念,我還是用了fastjson

    <!-- 啓用spring mvc 註解-->
       <mvc:annotation-driven>
        <!-- 啓動JSON格式的配置 -->
           <mvc:message-converters>  
           <!-- 這裏也可以自己定製class -->
        <bean id="jsonConverter" class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter"><!-- 這裏也可以自己定製class -->
            <property name="supportedMediaTypes">  
                <list>  
                    <value>text/html;charset=UTF-8</value>  <!-- 避免IE出現下載JSON文件的情況 -->
                </list>  
            </property>    
        </bean>  
    </mvc:message-converters>  
       </mvc:annotation-driven>

備註:

 @ResponseBody:將內容或對象作爲 HTTP 響應正文返回,使用@ResponseBody將會跳過視圖處理部分,而是調用適合的HttpMessageConverter,將返回值寫入輸出流。


在傳日期格式的數據到前臺的時候,fastjson默認將Date類型轉爲Long型,所以會導致後臺Date類型的數傳到前臺出錯
解決辦法:
1.局部解決-加註解。即在相應的字段上加入如下註解@JSONField (format="yyyy-MM-dd HH:mm:ss"),fastjson向前臺輸出json時,就會保留你設置的格式。但是這樣的話,就是你要注意,在每個Date類型的字段上都要加上這樣的註解
2.全局解決-寫一個註解的處理類,在xml文件裏調用自己定義的一個class,相當於重寫fastjson的converter。
3.全局解決-寫一個Date和String轉換類,在後臺先將數據轉成String再傳到前臺去。前臺string傳過來之後再轉成Date,這樣就不會出錯

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章