springmvc 使用 @ResponseBody注解 返回中文乱码

在使用@ResponseBody 时,返回String字符串,其中有中文。后台返回时还没有乱码,但是在前台jsp页面取值时出现乱码,中文都以 ? 的形式显示。

解决办法: 

在spring-mvc.xml中修改如下配置

<mvc:annotation-driven >
    	<mvc:message-converters register-defaults="true">
           	<bean class="org.springframework.http.converter.StringHttpMessageConverter">    
			   <property name="supportedMediaTypes">    
			       <list>    
		                <value>text/html;charset=UTF-8</value>  
                		<value>text/plain;charset=UTF-8</value>  
                		<value>application/json;charset=UTF-8</value>
			       </list>    
			   </property>    
		   </bean> 
    		
    	</mvc:message-converters>
    </mvc:annotation-driven>

<mvc:annotation-driven ></mvc:annotation-driven >中加入如上配置即可。

原因:在StringHttpMessageConverter中解析文本默认编码是iso-8859-1,源码如下:

public class StringHttpMessageConverter extends AbstractHttpMessageConverter<String> {

	public static final Charset DEFAULT_CHARSET = Charset.forName("ISO-8859-1");


	private final Charset defaultCharset;

	private final List<Charset> availableCharsets;

	private boolean writeAcceptCharset = true;
.....
省略其他

修改了 配置,可将编码设置为utf-8。

猜你喜欢

转载自1960370817.iteye.com/blog/2361408