今天把舊服務器上的項目轉移到新服務器上,結果返回的json中的中文亂碼了,以爲很奇怪,由於新服務器和舊服務器都是TX雲,也不會有太大區別呀,因而乎開始了爲期半天的蛋疼之旅。html
項目使用的是SpringMVC+MySQL+Mybatis,因而從各個方面查看Bug到底躲在哪,如下是我搜集到的和使用到的方法:mysql
修改web.xml,加入以下filter:web
<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(value = "/test", produces="application/json;charset=UTF-8")
<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>
<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>
其實上面這些在項目中都已經使用了,最後我也是實在是找不到還有哪些沒作的地方,因而開始懷疑是否是我數據庫有問題,用了之前的數據庫發現果真不亂碼,一查數據庫果真,數據自己存進去的時候就亂碼了。由於是新開的機器,沒有中文語言,我又在上面的MySQL執行了sql文件,因此···浪費了好長時間!!!spring
想一想時間也浪費了,不如好好整理一下吧,也許對大家有用呢^_^sql
另外發現AnnotationMethodHandlerAdapter和MappingJacksonHttpMessageConverter都是已經deprecated的類,也許對應的技術也應該更新換代了。數據庫