这几天使用Redis+SpringMVC+Mybatis做项目时又出现乱码的问题,在后台取出Redis缓存打印的结果是正常的,但是在前台取到的Json中文数据却出现问号乱码,经过在网上查找资料很快就解决了。原因是SpringMVC的@ResponseBody使用的默认处理字符串编码为ISO-8859-1,而我们前台或者客户端的编码一般是UTF-8或者GBK。现将解决方法分享如下!
第一种方法:使用@PostMapping注解的produces方法
它是注解@requestMapping注解里面的属性项,它的作用是指定返回值类型,不但可以设置返回值类型还可以设定返回值的字符编码;还有一个属性与其对应,就是consumes: 指定处理请求的提交内容类型(Content-Type),例如application/json, text/html;
对于需要返回字符串Json的方法添加注解,如下:
@PostMapping(value = "/findAll", produces = "application/json; charset=utf-8")
public String findAll(){
return provinceService.findAllJson();
}
但是这种解决方法只对单个方法起作用!
第二种方法:在Spring-MVC.xml中配置
(写在 <mvc:annotation-driven>里才有效)
<mvc:annotation-driven >
<!--乱码解决-->
<mvc:message-converters register-defaults="true">
<bean class="org.springframework.http.converter.StringHttpMessageConverter">
<property name="supportedMediaTypes" value="text/plain;charset=UTF-8"/>
</bean>
</mvc:message-converters>
</mvc:annotation-driven>
个人建议使用第二种方法!!!