1. 程式人生 > >SpringMVC 使用ResponseBody 返回字串中文亂碼

SpringMVC 使用ResponseBody 返回字串中文亂碼

在網上找了好多資料都是這樣解決的看程式碼

<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 /> 這段程式碼要放在最後面不然不起作用