SpringMVC使用@ResponseBody注解返回中文字符串乱码的问题
2017-06-20 20:34
627 查看
先说一下我的经历,以及解决问题的而过程。
在使用SpringMVC的时候,最开始的时候在配置文件中使用
去自动注册DefaultAnnotationHandlerMapping与AnnotationMethodHandlerAdapter 两个bean,这是spring MVC为@Controllers分发请求所必须的。再后来,Ajax请求需要返回字符串,因此在控制器上使用@ResponseBody注解来实现,这时候遇到的一个问题是,返回中文字符的时候会乱码,关于中文乱码的解决办法倒时有很多。SpringMVC的@ResponseBody注解使用的处理类为Spring的org.springframework.http.converter.StringHttpMessageConverter类,返回中文乱码的原因是其默认处理的字符集是ISO-8859-1。所以就出现了乱码的问题。
解决办法1:
在控制器上加上
因为明确的指明了UTF-8的字符编码,加上注解之后,中文乱码的问题的到了解决,但是之后又有了为HandlerMapping添加拦截器的需求,在这里为了精准的添加拦截器,所以放弃使用
这句话去自动注册
DefaultAnnotationHandlerMapping与AnnotationMethodHandlerAdapter 这两个bean,而改为手动注册。等修改了之后,发现中文乱码的问题又来了,采用了另外一种办法。
解决办法2:
这是注册DefaultAnnotationHandlerMapping与AnnotationMethodHandlerAdapter的代码,之所以自己去注册,是为了增加对SpringMVC的控制能力,比如你想为某个特定的HandleMapping注册一个拦截器之类的。看以上贴出的代码可以看到,在注册org.springframework.http.converter.StringHttpMessageConverter的时候明确了其编码格式为UTF-8。这种解决办法也是我比较喜欢的,因为不用再每一个返回中文字符串上的控制器都加一个
这样的注解了。
在使用SpringMVC的时候,最开始的时候在配置文件中使用
<mvc:annotation-driven />
去自动注册DefaultAnnotationHandlerMapping与AnnotationMethodHandlerAdapter 两个bean,这是spring MVC为@Controllers分发请求所必须的。再后来,Ajax请求需要返回字符串,因此在控制器上使用@ResponseBody注解来实现,这时候遇到的一个问题是,返回中文字符的时候会乱码,关于中文乱码的解决办法倒时有很多。SpringMVC的@ResponseBody注解使用的处理类为Spring的org.springframework.http.converter.StringHttpMessageConverter类,返回中文乱码的原因是其默认处理的字符集是ISO-8859-1。所以就出现了乱码的问题。
解决办法1:
在控制器上加上
@RequestMapping(value="/checkLogin",method=RequestMethod.POST,produces="text/html;charset=UTF-8")
因为明确的指明了UTF-8的字符编码,加上注解之后,中文乱码的问题的到了解决,但是之后又有了为HandlerMapping添加拦截器的需求,在这里为了精准的添加拦截器,所以放弃使用
<mvc:annotation-driven />
这句话去自动注册
DefaultAnnotationHandlerMapping与AnnotationMethodHandlerAdapter 这两个bean,而改为手动注册。等修改了之后,发现中文乱码的问题又来了,采用了另外一种办法。
解决办法2:
<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping"> <property name="interceptors"> <list> <bean class="cn.ciss.interceptor.LoginInterceptor"></bean> </list> </property> </bean> <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> --> <value>text/html;charset=UTF-8</value> </list> </property> </bean> b7ca <bean class="org.springframework.http.converter.ResourceHttpMessageConverter"></bean> <bean class="org.springframework.http.converter.ByteArrayHttpMessageConverter"></bean> <bean class="org.springframework.http.converter.xml.SourceHttpMessageConverter"></bean> <bean class="org.springframework.http.converter.xml.XmlAwareFormHttpMessageConverter"></bean> <bean class="org.springframework.http.converter.xml.Jaxb2RootElementHttpMessageConverter"></bean> <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"></bean> </list> </property> </bean>
这是注册DefaultAnnotationHandlerMapping与AnnotationMethodHandlerAdapter的代码,之所以自己去注册,是为了增加对SpringMVC的控制能力,比如你想为某个特定的HandleMapping注册一个拦截器之类的。看以上贴出的代码可以看到,在注册org.springframework.http.converter.StringHttpMessageConverter的时候明确了其编码格式为UTF-8。这种解决办法也是我比较喜欢的,因为不用再每一个返回中文字符串上的控制器都加一个
@RequestMapping(value="/checkLogin",method=RequestMethod.POST,produces="text/html;charset=UTF-8")
这样的注解了。
相关文章推荐
- 解决springmvc使用@ResponseBody返回String类型字符串中文乱码问题
- SpringMVC中使用jackson,注解@ResponseBody返回中文乱码问题
- SpringMVC中解决@ResponseBody注解返回中文乱码问题
- SpringMVC使用@RequestBody后台返回前台中文字符串乱码的问题解决方案
- SpringMVC中解决@ResponseBody注解返回中文乱码问题
- springmvc使用@responsebody返回字符串乱码问题
- Java学习笔记37:Spring 使用 @ResponseBody 返回中文乱码问题解决
- 解决Spring MVC @ResponseBody返回中文字符串乱码问题
- 解决Spring MVC @ResponseBody返回中文字符串乱码问题
- SpringMVC中使用@ResponseBody注解返回值,Ajax取得中文乱码解决方法
- SpringMVC3的ResponseBody返回字符串(JSON)乱码问题解决
- SpringMVC的@ResponseBody返回JSON,中文乱码问题的解决.
- SpringMVC3的ResponseBody返回字符串乱码问题解决
- springmvc Spring3 MVC @ResponseBody返回,jquery ajax调用中文乱码问题解决
- 解决Spring MVC @ResponseBody返回中文字符串乱码问题
- Spring MVC @ResponseBody返回中文字符串乱码问题
- SpringMVC使用@ResponseBody输出字符串时遇到的乱码问题及解决办法
- SpringMVC3的ResponseBody返回字符串乱码问题解决
- SpringMVC使用@ResponseBody输出字符串时遇到的乱码问题及解决办法
- 解决Spring MVC @ResponseBody返回中文字符串乱码问题