關於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

這兩篇文章的評論區對我解決這個問題也是特別有幫助的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM