• 关于SpringMVC中text/plain的编码导致的乱码问题解决方法


      有老铁的项目出现个问题,就是用SpringMVC给前台返回一句话,是String类型的,然后前台接收到是乱码。

      然后以为是简单的response的编码问题,就在方法体中开始给response设置编码,结果charset和ContentType都设置遍

    了,于事无补,看了下代码中的方法体,突然想到这是用SpringMVC框架返回消息的,跟response没多大关系啊,再怎么

    给response设置各种编码和类型,最后还是SpringMVC给返回消息的,于是在浏览器看了下请求头,发现乱码消息的

    ContentType是text/plain,而charset居然是ISO-8895-1类型的,怪不得会出现乱码。

      于是开始搜索相关关键字,果然找到一篇帖子说SpringMVC默认就是ISO编码,可以以修改源代码的方式解决这个问题,于是

    打开源代码一看,果然是ISO-8895-1,可是打开的class文件,无法修改,不太懂如何修改源代码,自己写一个一模一样的

    包,类的方法试了一下就发现特别麻烦。

    public class StringHttpMessageConverter extends AbstractHttpMessageConverter<String> {  
      
        public static final Charset DEFAULT_CHARSET = Charset.forName("ISO-8859-1"); 
    

      还有一种方法是在SpringMVC的配置文件中对text/plain做编码配置,本以为这个方法肯定能成功,结果怎么配置配置都不

    管用,后来在别人的帖子中也看到有网友也是用这种方法做配置,不管用,看来这种方法不是特别通用,也许是我们的

    Spring或者SpringMVC的版本号不一样或者怎么地,反正就是不管用,通通不管用。

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

      还有这种配置方法:

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

      最后在一个帖子中发现了一个大佬的解决方法,就是在方法体中加入一个produces参数,用这个参数对所需要改变的请求类型

    做编码设置,成功了!!!示例代码如下:

    @RequestMapping(value="/testGarbled.do", produces="text/html;charset=UTF-8" )
    @ResponseBody
    public String testGarbled(ModelMap modelMap) {
        return "中文乱码";
    }
    

      总结一下,最后这种方法是最实用最简单的方法,因为有时项目中用到text/plain的地方很少,其他的text/html类型的很少会出现乱

    码,所以这个疗效最快。

    附上两篇参考链接:

    http://ask.csdn.net/questions/149031#answer_tab_upload

    http://blog.csdn.net/yfisaboy/article/details/30059969

    这两篇文章的评论区对我解决这个问题也是特别有帮助的。

    转自:关于SpringMVC中text/plain的编码导致的乱码问题解决方法 - 走看看 (zoukankan.com)

  • 相关阅读:
    如何在一个控件上同时实现单触和多触事件
    看看iOS 5.0 beta 6都有哪些变化吧
    转,net实现下载
    转检测到潜在危险
    如何分析已有项目如何能够得到最快最大的提升???
    转Unity 入门
    近段总结
    转,net几个热点问题
    dll动态链接库
    转使用NUnit在.Net编程中进行单元测试
  • 原文地址:https://www.cnblogs.com/wwssgg/p/16446622.html
Copyright © 2020-2023  润新知