• 【SpringMVC】一次处理项目中文乱码的经历


    一次处理项目中文乱码的经历

    背景

    今天把旧服务器上的项目转移到新服务器上,结果返回的json中的中文乱码了,觉得很奇怪,因为新服务器和旧服务器都是TX云,也不会有太大区别呀,于是乎开始了为期半天的蛋疼之旅。

    项目使用的是SpringMVC+MySQL+Mybatis,于是从各个方面查看Bug到底躲在哪,以下是我搜集到的和使用到的方法:

    在web.xml中加入编码过滤器

    修改web.xml,加入如下filter:

    <filter>
        <filter-name>encodingFilter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <async-supported>true</async-supported>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
        <init-param>
            <param-name>forceEncoding</param-name>
            <param-value>true</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>encodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    

    连接数据库时加入字符编码

    jdbc.url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8
    

    RequestMapping注解中加入produces字段

    @RequestMapping(value = "/test", produces="application/json;charset=UTF-8")
    

    SpringMVC配置文件spring-mvc.ml中加入消息转换器

    <bean id="mappingJacksonHttpMessageConverter"
    	class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">
    	<property name="supportedMediaTypes">
    		<list>
    			 <value>application/json;charset=UTF-8</value>
    		</list>
    	</property>
    </bean>
    
    <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
    	<property name="messageConverters">
    		<list>
    			<ref bean="mappingJacksonHttpMessageConverter" />	<!-- JSON转换器 -->
    		</list>
    	</property>
    </bean>
    

    SpringMVC配置文件spring-mvc.ml中加入StringHttpMessageConverter

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

    The End

    其实上面这些在项目中都已经使用了,最后我也是实在是找不到还有哪些没做的地方,于是开始怀疑是不是我数据库有问题,用了以前的数据库发现果然不乱码,一查数据库果然,数据本身存进去的时候就乱码了。因为是新开的机器,没有中文语言,我又在上面的MySQL执行了sql文件,所以···浪费了好长时间!!!

    想想时间也浪费了,不如好好整理一下吧,也许对你们有用呢_

    另外发现AnnotationMethodHandlerAdapter和MappingJacksonHttpMessageConverter都是已经deprecated的类,也许对应的技术也应该更新换代了。

  • 相关阅读:
    技术面试之经验总结
    为何只有两篇文章?
    LOJ6364 烂柯
    mysql批量更新数据(性能优化)
    一个对象的key引发的血案
    总结与元素坐标相关的属性(再也搞不混了)
    利用nodejs搭建服务器,测试AJAX
    初探jquery之强大丰富的选择器
    Web前端开发规范手册
    IE8下标签float导致的bug。
  • 原文地址:https://www.cnblogs.com/puyangsky/p/6291481.html
Copyright © 2020-2023  润新知