Spring @ResponseBody 返回中文乱码问题

详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt102

今天在使用spring 的时候,发现中文返回的是乱码。

经过研究发现,主要是@ResponseBody 引起的。主要是由于 @ResponseBody 返回字符串结果的时候,使用了org.springframework.http.converter.StringHttpMessageConverter 中默认的编码。

请看 org.springframework.http.converter.StringHttpMessageConverter :

  1. public class StringHttpMessageConverter extends AbstractHttpMessageConverter<String> {
  2. public static final Charset DEFAULT_CHARSET = Charset.forName("ISO-8859-1");
  3. private final List<Charset> availableCharsets;
  4. private boolean writeAcceptCharset = true;
  5. public StringHttpMessageConverter() {
  6. super(new MediaType("text", "plain", DEFAULT_CHARSET), MediaType.ALL);
  7. this.availableCharsets = new ArrayList<Charset>(Charset.availableCharsets().values());
  8. }

默认情况下,是ISO-8859-1编码,我们要将ISO-8859-1编码改成utf-8编码。

[java] view plaincopyprint?

  1. public static final Charset DEFAULT_CHARSET = Charset.forName("ISO-8859-1");

我们的解决方法是,在spring-servlet.xml中,加入一个bean

    1. <bean
    2. class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
    3. <property name="messageConverters">
    4. <list>
    5. <bean
    6. class="org.springframework.http.converter.StringHttpMessageConverter">
    7. <property name="supportedMediaTypes">
    8. <list>
    9. <bean class="org.springframework.http.MediaType">
    10. <constructor-arg index="0" value="text" />
    11. <constructor-arg index="1" value="plain" />
    12. <constructor-arg index="2" value="UTF-8" />
    13. </bean>
    14. </list>
    15. </property>
    16. </bean>
    17. </list>
    18. </property>
    19. </bean>
时间: 2024-08-09 06:33:42

Spring @ResponseBody 返回中文乱码问题的相关文章

解决SpringMVC的@ResponseBody返回中文乱码

SpringMVC的@ResponseBody返回中文乱码的原因是SpringMVC默认处理的字符集是ISO-8859-1,在Spring的org.springframework.http.converter.StringHttpMessageConverter类中可以看到如下代码: public static final Charset DEFAULT_CHARSET = Charset.forName("ISO-8859-1"); 解决返回中文乱码的问题有两种,第一种是局部的,只针

@ResponseBody 返回中文乱码问题解决 spingmvc

<!-- UTF8解决乱码问题 --> <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"> <property name="messageConverters"> <list> <bean class="org.springframework.http.conv

spring json 返回中文乱码

如前台显示的json数据中的中文为???,则可尝试以下方法. 方法一(推荐):在@RequestMapping中添加  produces={"text/html;charset=UTF-8;","application/json;"} @RequestMapping(value = "***",produces={"text/html;charset=UTF-8;","application/json;"}

@ResponseBody返回中文乱码

1.在方法上修改编码 这种方式,需要对每个方法都进行配置. 2.修改springmvc的配置文件 同时注意,把这个配置写在扫描包的上面. 原文地址:https://www.cnblogs.com/SmallStrange/p/9574284.html

Spring MVC中@ResponseBody 返回中文字符串乱码问题

在MVC配置文件中配置 <mvc:annotation-driven> <!-- 解决@ResponseBody返回中文乱码 --> <mvc:message-converters register-defaults="true"> <bean class="org.springframework.http.converter.StringHttpMessageConverter"> <property name

SpringMVC使用Ajax请求返回中文乱码

前言: 最近在写一个JavaWeb后台时采用了spring+MyBatis+MySQL的方式.记录下遇到的关键问题 接口返回数据相关 使用@ResponseBody后返回NUll 说明:刚把后台运行起来,兴高采烈的测试接口数据,结果无论如何都是返回null, 最终通过各种百度,发现原来是没有引入关键的Jar包. 解决办法: 需要引入jackson的jar包(jackson core和jackson mapper),引入后 图: 使用@RequestMapping返回中文乱码 原因分析:(网上基本

Spring+MyBatis实践—中文乱码

多种中文乱码问题及解决: jsp页面乱码 表单提交乱码 URL中文参数乱码 1.jsp页面乱码解决(2步): 新建jsp页面: <%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Trans

spring mvc @ResponseStatus 注解 注释返回中文乱码的问题

前言 前文中讲到,使用@ResponseStatus注解,可以修饰一个异常类,在发生异常的时候返回指定的错误码和消息,在返回的 reason中包含中文的时候,就会出现中文乱码的问题 现象 reason中包含中文的时候,前端返回为乱码 /** * 自定义异常类 * * @author Administrator * */ @ResponseStatus(value = HttpStatus.FORBIDDEN, reason = "没有权限") public class TestExce

Spring MVC @ResponseBody响应中文乱码

问题:在前端通过get请求服务端返回String类型的服务时,会出现中文乱码问题 原因:由于spring默认对String类型的返回的编码采用的是 StringHttpMessageConverter>>> spring mvc的一个bug,spring MVC有一系列HttpMessageConverter去处理用@ResponseBody注解的返回值,如返回list则使用MappingJacksonHttpMessageConverter,返回string,则使用StringHttp