本文轉載自: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"/>
