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

    现在看来,上一次讨论这个话题的解决方案基本是治标不治本,没什么实际效用。现在的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>

    上述两个途径都已实际验证过。参数了如下文档:http://my.oschina.net/alexgaoyh/blog/316314

    RestTemplate中文乱码的道理是一样的。

转载于:https://my.oschina.net/dayu6/blog/419915

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值