SpringMVC 使用ResponseBody 返回字串中文亂碼
阿新 • • 發佈:2019-02-05
在網上找了好多資料都是這樣解決的看程式碼
<mvc:annotation-driven> <mvc:message-converters register-defaults="true"> <bean class="org.springframework.http.converter.StringHttpMessageConverter"> <constructor-arg value="UTF-8" /> </bean> </mvc:message-converters> </mvc:annotation-driven>
解決不了問題啊。。。 這樣設定訊息轉換器的字元編碼沒用 看最後DEBUG的結果
[application/octet-stream, text/plain;charset=ISO-8859-1, application/xml, text/xml, application/x-www-form-urlencoded, application/*+xml, multipart/form-data, application/json;charset=UTF-8, application/*+json;charset=UTF-8, */*] [text/plain;charset=ISO-8859-1, */*, application/json;charset=UTF-8, application/*+json;charset=UTF-8]
依然出現了ISO-8859-1這個字元編碼
最後解決方式
<mvc:annotation-driven> <!-- 訊息轉換器 --> <mvc:message-converters register-defaults="true"> <bean class="org.springframework.http.converter.StringHttpMessageConverter"> <property name="supportedMediaTypes" value="text/html;charset=UTF-8" /> </bean> </mvc:message-converters> </mvc:annotation-driven>
雖然最後還是出現了text/plain;charset=ISO-8859-1 這個字元編碼但是 加上一個text/html;charset=UTF-8並且是再這個陣列的第一個
[text/html;charset=UTF-8,text/plain;charset=ISO-8859-1, */*, application/json;charset=UTF-8, application/*+json;charset=UTF-8]
為什麼問題這樣就解決了 看原始碼 AbstractMessageConverterMethodProcessor.writeWithMessageConverters 這個類的這個方法 你會發現
text/html;charset=UTF-8排在第一個 取到後就break了 中文亂碼解決了
之前網上找了好多的程式碼 但是都解決不了 亂碼問題
補充一下<mvc:annotation-driven /> 這段程式碼要放在最後面不然不起作用