SpringMVC 使用@ResponseBody返回json 中文乱码

时间:2021-07-23 20:24:06

   

   场景

   小编在springMVC框架中使用@ResponseBody注解从controller层想ajax返回String类型的参数的时候,发现中文乱码,这确实个尴尬的问题,于是小编跟踪了一下spring的源码,看了看string类型的转换问题,在这个方法中我们可以看到,spring中解析字符串的转换器默认的编码竟然是ISO-8859-1,这就是问题所在了:


   SpringMVC 使用@ResponseBody返回json 中文乱码

   既然找到问题了,我们就给出下面两种方法来解决

  下面两个方法是在spring4.2.5版本上测试的,如果使用的版本有较大的差异的话,可能会有所差异

  方法一:使用(produces = "application/json; charset=utf-8"):

   

    @RequestMapping(value="/getUsersByPage",produces = "application/json; charset=utf-8")
// @RequestMapping("/getUsersByPage")
@ResponseBody
public String getUsersByPage(String page,String rows,String text,HttpServletRequest request,HttpServletResponse response){
 

  方法二、在springmvc.xml文件中添加


<!-- 处理请求返回json字符串的中文乱码问题 -->
<mvc:annotation-driven>
<mvc:message-converters>
<bean class="org.springframework.http.converter.StringHttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<value>application/json;charset=UTF-8</value>
</list>
</property>
</bean>
</mvc:message-converters>
</mvc:annotation-driven>

  上面两种方法已经测试过,可以解决问题,当然还会有其余的解决方法,比如我们可以使用filter来解决,都是比较好的方法,小编在这记录和分享一下,希望可以对读者有所帮助!