您的位置:首页 > 编程语言 > Java开发

SpringMVC 返回JSON数据类型常常会中文乱码 之二

2015-05-26 08:49 661 查看
现在看来,上一次讨论这个话题的解决方案基本是治标不治本,没什么实际效用。现在的4.1.6版本就完全失效了。

新增两个解决方案:

1.重写StringHttpMessageConverter类,只要在spring源码中找到这个类的java文件,拷贝到工程下原样新建一个(原来的包路径,原来的类名称),利用java包覆盖机制,将引用库jar包中原来的类覆盖掉就可以。

在源码中将

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

替换为:

public static final Charset DEFAULT_CHARSET = Charset.forName("UTF-8");


2.在spring配置文件中新建一个StringHttpMessageConverter供需要它对象引用,唯一注意的是要在构造函数中将UTF-8字符集传进去。网上关于这个似乎很多都是用字符串传进去的,貌似Charset无法用字符串直接构造对象,因此必须先构建出一个Charset给StringHttpMessageConverter的构造函数引用。配置xml片段如下:

<bean name="utf8Charset" class="java.nio.charset.Charset" factory-method="forName" >
<constructor-arg value="UTF-8" ></constructor-arg>
</bean>

<bean
class="org.springframework.http.converter.StringHttpMessageConverter">
<constructor-arg ref="utf8Charset">
</constructor-arg>
<property name="supportedMediaTypes">
<list>
<value>text/plain;charset=UTF-8</value>
<value>text/html;charset=UTF-8</value>
<value>text/json;charset=UTF-8</value>
<value>application/x-www-form-urlencoded;charset=UTF-8</value>
</list>
</property>
</bean>

<!-- 默认的注解映射的支持 -->
<mvc:annotation-driven >
<mvc:message-converters>
<bean
class="org.springframework.http.converter.StringHttpMessageConverter">
<constructor-arg ref="utf8Charset">
</constructor-arg>
<property name="supportedMediaTypes">
<list>
<value>text/plain;charset=UTF-8</value>
<value>text/html;charset=UTF-8</value>
<value>text/json;charset=UTF-8</value>
<value>application/x-www-form-urlencoded;charset=UTF-8</value>
</list>
</property>
</bean>
</mvc:message-converters>
</mvc:annotation-driven>

上述两个途径都已实际验证过。参数了如下文档:/article/3509042.html

RestTemplate中文乱码的道理是一样的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: