在Spring的MVC中,如果你使用的是中文,用的是UTF-8编码,有的时候我们会直接返回一个文本给前端的AJAX调用。Controllor中的代码如下:
@ResponseBody
@RequestMapping(value = "/test", method = RequestMethod.GET)
public String test() {
return "中文测试";
}
这时发现响应出来的是乱码。原因是Spring会采用默认的StringHttpMessageConverter类来进行String类型的响应处理。查看源码发现,这个类莫名其妙的把响应的编码写死了,这样就产生了乱码问题。其中有句代码是:
public static final Charset DEFAULT_CHARSET = Charset.forName("ISO-8859-1");
解决方法:
想到的方法是采用BeanPostProcessor,在Spring初始化好StringHttpMessageConverter之后进行修改响应类型。好在该类提供了setSupportedMediaTypes方法可以进行设置。所以实现的代码如下:
public class UTF8StringBeanPostProcessor implements BeanPostProcessor{
@Override
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
if(bean instanceof StringHttpMessageConverter){
MediaType mediaType = new MediaType("text", "plain", Charset.forName("UTF-8"));
List<MediaType> types = new ArrayList<MediaType>();
types.add(mediaType);
((StringHttpMessageConverter) bean).setSupportedMediaTypes(types);
}
return bean;
}
@Override
public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
return bean;
}
}
然后在配置文件上加入:
<beans:bean class="com.walmart.bestsales.util.UTF8StringBeanPostProcessor"></beans:bean>
这样就成功实现了UTF8编码的输出。
小结:采用BeanPostProcessor实现的好处就是不对已有的代码做修改,如果以后升级Spring也容易进行兼容。在国际化的大环境下,默认值至少也应该是UTF-8呀。
分享到:
相关推荐
Spring MVC中默认的ResponseBody为String的乱码问题.pdfSpring MVC中默认的ResponseBody为String的乱码问题.pdf
Spring MVC下彻底解决@ResponseBody转义html特殊字符问题,解决包括尖角号(),单引号('),双引号("),按位与(&),反斜杠(\)。
NULL 博文链接:https://coocaobo.iteye.com/blog/2410629
《Spring MVC 3.0实战指南》,参考《Spring 3.x企业应用开发实战》。 内容简介: 1、Spring MVC框架简介 2、HTTP请求地址映射 3、HTTP请求数据的绑定 4、数据转换、格式化、校验 5、数据模型控制 6、视图及解析器 7...
主要给大家介绍了关于spring Mvc配置xml使ResponseBody返回Json的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
《Spring MVC 3.0实战指南》,参考《Spring 3.x企业应用开发实战》。 内容简介: 1、Spring MVC框架简介 2、HTTP请求地址映射 3、HTTP请求数据的绑定 4、数据转换、格式化、校验 5、数据模型控制 6、视图及...
NULL 博文链接:https://nethub2.iteye.com/blog/2329387
基于spring mvc注解开发的ajax项目实例,通过对注解@ResponseBody的应用,实现ajax局部刷新功能,java代码端返回Map,Integer,User,List等对象,在jsp页面通过$.each(data,function(index,entity) { });...
主要介绍了SpringMVC中解决@ResponseBody注解返回中文乱码问题, 小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
本框架使用Maven整合jar包,完全按照SpringFramework官方规范整合,加入Druid数据源及SpringJDBC,使用servlet3.1容器,代码整洁易读,不懂spring4及servlet3.1规范的同学可以下载看一看,收获一定不小。另:结合...
下面小编就为大家分享一篇spring+mybatis 通过@ResponseBody返回结果中文乱码的解决方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
--处理 @ResponseBody 中文乱码问题 --> <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"> <property name="messageConverters"> <list> <!-- Support...
1,搭建SpringMVC 2,加载properties配置文件 3,集成mybatis ...7,解决@ResponseBody return String的中文乱码问题 8,配置静态资源映射ResourceHandlers 9,配置ViewControllers 10,配置filter 11,配置拦截器
1)spring MVC 中@ResponseBody需要的所有JAR包 2)性能还不错的模板引擎jetbrick-template-2.x 2.x的所需的所有jar包 3)日志jar包:slf4j和logback 所有 4)阿里 druid 连接池jar包 5)mysql数据库链接驱动jar包 6...
spring-mvc.xml 配置自动扫描的包、配置视图解析器 如何把 handler方法返回值解析为实际的物理视图、配置静态资源映射静态资源交给默认的Servlet、配置 mvc:annotation-driven标签开启注解(4)@RestController =@...
主要介绍了Spring MVC打印@RequestBody、@Response日志的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
SpringMVC 采用了松散耦合可插拔组件结构,更具扩展性和灵活性,开发 Web 应用流程也非常简单,越来越多的大公司开始使用 SpringMVC 作为开发框架。...12. ResponseBody 注解 13. SessionAttribute 注解 14. 其他注解
后来发现,因为在controller中返回json用了@ResponseBody,而spring源码中@ResponseBody 的实现类发现其默认的编码是 iso-8859-1,而项目用的编码为utf-8,所以传中文会出现乱码。 这里我使用了注解来解决: @...
Picker的后台使用Spring MVC+hibernate+mysql,实现添加书籍,提问、做笔记,上传附件、照片,关注用户、关注问题,私信、好友动态,好友圈等功能。下面是功能交互图:#package介绍Controller层 .controller: 提供了...
在使用springMVC框架构建web应用,客户端常会请求字符串、整型、json等格式的数据,通常使用@ResponseBody注解使 controller回应相应的数据而不是去渲染某个页面。