spring mvc 返回字符串帶雙引號及StringHttpMessageConverter亂碼處理


本文轉載自:http://blog.csdn.net/wangyangbto/article/details/48804155

很多人都碰到過,SpringMVC使用 @ResponseBody 注解,返加字符串不做任何處理時,有可能會出現亂碼問題。

這是由於 StringHttpMessageConverter 類中,默認采用的字符集是 ISO-8859-1。

public class StringHttpMessageConverter extends AbstractHttpMessageConverter<String> {

   public static final Charset DEFAULT_CHARSET = Charset.forName("ISO-8859-1");


   private final Charset defaultCharset;

   private final List<Charset> availableCharsets;

   private boolean writeAcceptCharset = true;


   /**
    * A default constructor that uses {@code "ISO-8859-1"} as the default charset.
    * @see #StringHttpMessageConverter(Charset)
    */
   public StringHttpMessageConverter() {
      this(DEFAULT_CHARSET);
   }

那么要解決亂碼問題,需要改變 StringHttpMessageConverter 中的默認字符集,本文中以UTF-8為例。

修改默認字付集:

<bean id="stringHttpMessageConverter" class="org.springframework.http.converter.StringHttpMessageConverter">
    <constructor-arg value="UTF-8" index="0"/>
    <property name="supportedMediaTypes">
        <list>
            <value>text/plain;charset=UTF-8</value>
        </list>
    </property>
</bean>

配置起效

方式一:

<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/>
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
    <property name="messageConverters">
        <list>
            <ref bean="stringHttpMessageConverter"/>
            <ref bean="jackson2HttpMessageConverter"/>
        </list>
    </property>
</bean>

<mvc:annotation-driven />

注:配置必須在 <mvc:annotation-driven /> 之前,否則將不會啟效;<mvc:annotation-driven /> 會自動注冊DefaultAnnotationHandlerMapping 與AnnotationMethodHandlerAdapter。

方式二:

<mvc:annotation-driven>
    <mvc:message-converters>
        <ref bean="stringHttpMessageConverter"/>
        <ref bean="jackson2HttpMessageConverter"/>
    </mvc:message-converters>
</mvc:annotation-driven>

 

接下來的內容轉載自:http://blog.csdn.net/flushest/article/details/52755785

spring mvc中沒有直接使用默認配置,而是另外配置了json解析器

 <!-- 返回json  需要導入 fastjson.jar包 -->
    <mvc:annotation-driven>
        <mvc:message-converters register-defaults="false">
            <!-- 避免IE執行AJAX時,返回JSON出現下載文件 -->
            <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>

使用@responsebody注解並且返回值類型為String時,返回的string字符串帶有雙引號,其原因是直接將string類型轉成了json字符串,應該在json解析器之前添加字符串解析器

<bean class="org.springframework.http.converter.StringHttpMessageConverter"/>

 


免責聲明!

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



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