關於SpringMVC返回數據帶斜杠字符串問題之解決方案


常用SpringMVC的基本都知道,@RestController和@ResponseBody加上了都會返回json數據。它們的區別主要是注解方面,一個是類級別的一個是方法級別。

之前我們比較喜歡使用@ResponseBody,后來覺得重復性太多了,特別是使用swagger以后,一個方法上面關注解就上了4到5層,為了減少這些繁雜的過程,我們就采取簡潔策略,因為都是基於前后端分離開發,前端展示也不打算使用諸如jsp、freemarke、volocity等模板語言。直接上手html,當然主要是以ajax的方式進行交互。

先列舉這么幾個情況?通常情況下,類上面有對應的RestController注解或者是你的類上是@Controller注解,並在每個方法上面加上@ResponseBody。正常是應該返回JSON數據的。通過POSTMAN測試或者Jmeter。

關於@RestController和@ResponseBody源碼解析可以參考我的這篇文章:前后端交互之封裝Ajax+SpringMVC源碼分析

當然有的時候沒有返回的話,根據你使用而定比如使用FastJSON卻沒有返回對應的JSON數據,可通過在SpringMVC配置文件加上如下內容解決:

 <!-- FastJson注入 -->
    <mvc:annotation-driven>
        <mvc:message-converters register-defaults="true">
            <!-- 避免IE執行AJAX時,返回JSON出現下載文件 -->
            <!-- FastJson -->
            <bean id="fastJsonHttpMessageConverter"
                  class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter">
                <property name="supportedMediaTypes">
                    <list>
                        <!-- 這里順序不能反,一定先寫text/html,不然ie下出現下載提示 -->
                        <value>text/html;charset=UTF-8</value>
                        <value>application/json;charset=UTF-8</value>
                    </list>
                </property>
            </bean>
        </mvc:message-converters>
    </mvc:annotation-driven>

 

如果是jackjson,可通過在SpringMVC的配置文件加上如下內容解決:

<mvc:annotation-driven>
        <mvc:message-converters>
        <!-- 避免string類型直接解析成json-->
            <bean class="org.springframework.http.converter.StringHttpMessageConverter" />
            <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"/>
        </mvc:message-converters>
    </mvc:annotation-driven>

 

當然了,如果還出現這種情況的話,通常情況下可將返回值定為JSONObject或Object,而不是String,因為通過String的話,還需要調用JSONObject.toString()方法進進行轉換。有的時候轉換不起作用。

當然了,即便出現這種情況也可以轉換為json,比如使用jQuery的ajax方法交互,可通過eval進行轉義或者JSON.parse,將普通字符串轉為JSON格式字符串。另外還有一個要簡單說明下,就是如果是返回中文亂碼問題,注意要在對應的方法上加上這么一句produces="application/json;charset=utf-8",即可解決亂碼問題

如果是安卓,記得有一次我遇到這種情況,也是給他提供接口的時候,突然返回是帶斜杠的字符串。他是通過replace方法進行替換解決的。不過個人建議,如果遇到這種情況的話,可以使用返回值為JSONObject這樣可以避免出現這種情況。

 


免責聲明!

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



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