在SpringMVC中,@ResponseBody返回中文数据时会乱码,可以说是spring mvc的一个bug,spring MVC有一系列HttpMessageConverter去处理用@ResponseBody注解的返回值,如返回list则使用 MappingJacksonHttpMessageConverter ; 返回string,则使用 StringHttpMessageConverter,而这个convert使用的是字符集是iso-8859-1,而且是final的
-------- public static final Charset DEFAULT_CHARSET = Charset.forName("ISO-8859-1");
解决方法一:Spring配置文件中
<context:annotation-config>
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" >
<property name="messageConverters">
<list>
<bean class = "org.springframework.http.converter.StringHttpMessageConverter">
<property name = "supportedMediaTypes">
<list>
<value>text/plain;charset=UTF-8</value>
</list>
</property>
</bean>
</list>
</property>
</bean>
</context:annotation-config>
但是也有网友认为这种方式不一定有效,经试验下面这种方法也可以:
解决方法二:
@RequestMapping(value="createExcel",produces="plain/text; charset=UTF-8")
public @ResponseBody String method(){
//..............
}
也就是用produces