`

Spring MVC中默认的ResponseBody为String的乱码问题

    博客分类:
  • j2ee
 
阅读更多

个人技术博客:http://demi-panda.com

 

在Spring的MVC中,如果你使用的是中文,用的是UTF-8编码,有的时候我们会直接返回一个文本给前端的AJAX调用。Contr ollor中的代码如下:

@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之后进行修改响应类型。好在该类提供了setSupported MediaTypes方法可以进行设置。所以实现的代码如下:

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;
  }
}

 然后在配置文件上加入:

<bean class="com.tuan.geo.service.impl.UTF8StringBeanPostProcessor"/>

 

小结:采用BeanPostProcessor实现的好处就是不对已有的代码做修改,如果以后升级Spring也容易进行兼容。在国际化的大环境下,默认值至少也应该是UTF-8呀。

 

分享到:
评论

相关推荐

    Spring MVC中默认的ResponseBody为String的乱码问题.pdf

    总结来说,解决Spring MVC中ResponseBody返回String类型中文乱码的关键在于修改StringHttpMessageConverter的默认字符集,使其支持UTF-8编码。这可以通过自定义配置或使用BeanPostProcessor实现,后者具有更高的灵活...

    spring mvc 自學筆記

    ### Spring MVC 中的乱码及 RESTful 风格支持 #### 解决乱码问题 在 Spring MVC 中处理中文乱码通常有两种方法: - **设置字符编码过滤器**:通过配置一个全局的字符编码过滤器来解决所有请求的乱码问题。 ```java...

    Spring MVC面试题(2022最新版)

    在Spring MVC中,可以通过返回一个String对象来实现重定向或转发。对于重定向,可以使用"redirect:"前缀;对于转发,则直接返回视图名称即可。 ``` // 重定向 public String handleRequest(HttpServletRequest ...

    Spring MVC面试宝典1.pdf

    ### Spring MVC面试宝典知识点详解 #### 一、SpringMVC简介 ##### 1.1 什么是SpringMVC? SpringMVC是一个基于Java的轻量级Web应用框架,该框架遵循MVC(Model-View-Controller)设计模式,旨在简化Web层的开发。...

    json 中文乱码解决方案

    本文将详细介绍如何解决JSON中的中文乱码问题,并提供几种简单实用的方法来帮助开发者避免这类问题的发生。 #### 一、问题背景与原因分析 在Web开发中,前后端之间传递的数据格式往往采用JSON(JavaScript Object ...

    Spring MVC 关于controller的字符编码问题

    总结来说,Spring MVC中处理Controller的字符编码问题主要是通过设置响应的`Content-Type`,使用`@RequestMapping`的`produces`属性,或者直接操作`HttpServletResponse`来指定字符集。同时,了解如何使用不同的参数...

    springmvc开发笔记

    ### Spring MVC 开发笔记:解决异步刷新时的乱码问题 #### 一、问题背景与分析 ...无论选择哪种方案,都可以确保在Spring MVC开发过程中,异步请求能够正确地处理中文等非ASCII字符,避免乱码问题的发生。

    flex上传下载 并解决中文乱码

    例如,在Spring MVC中,可以在配置文件中指定`&lt;filter&gt;`处理编码问题,或者在Controller方法中使用`@RequestParam(value = "paramName", required = false, defaultValue = "", encoding = "UTF-8")`注解。...

    SpringMVC+Mybatis JAVA配置 非XML

    1,搭建SpringMVC 2,加载properties配置文件 3,集成mybatis ...7,解决@ResponseBody return String的中文乱码问题 8,配置静态资源映射ResourceHandlers 9,配置ViewControllers 10,配置filter 11,配置拦截器

    springmvc 发送ajax出现中文乱码的解决方法汇总

    在开发Web应用时,Spring MVC和Ajax的交互过程中,经常遇到中文乱码的问题。这个问题主要出现在数据从服务器传输到客户端的过程中,由于编码设置不正确,导致中文字符无法正常显示。以下将详细介绍四种解决Spring ...

    Springmvc如何返回xml及json格式数据

    在这个例子中,`Result`类包含了状态信息,通过`@ResponseBody`注解,Spring MVC会将`Result`对象转换为JSON格式并返回给客户端。 3. **返回数据的错误尝试** - **错误尝试1**:将XML数据转换为String直接返回,...

    Spring MVC的文件下载实例详解

    在Spring MVC框架中,文件下载是一项常见的功能,用于允许用户从服务器端获取并保存文件到本地计算机。在本文中,我们将深入探讨如何实现一个完整的文件下载实例,包括从磁盘读取文件、设置适当的响应头以及处理不同...

    SpringMVC+Mybatis+Maven 纯XML配置

    1,搭建SpringMVC 2,加载properties配置文件 3,集成mybatis ...7,解决@ResponseBody return String的中文乱码问题 8,配置静态资源映射ResourceHandlers 9,配置ViewControllers 10,配置filter 11,配置拦截器

    解决SpringMvc后台接收json数据中文乱码问题的几种方法

    在`mvc:annotation-driven`标签内,配置`StringHttpMessageConverter`,明确指定字符编码为UTF-8,以防止JSON序列化和反序列化过程中的乱码问题。 ```xml &lt;mvc:annotation-driven&gt; &lt;mvc:message-converters ...

    java类文件通过$获取properties文件的属性值

    根据题目提供的示例代码,可以看到定义了一个名为`MainController`的类,该类使用了`@Controller`注解,表明这是一个Spring MVC控制器类。 在这个类中,有一个成员变量`sysId`,并通过`@Value("${sysId}")`注解来...

    Springmvc完成ajax功能实例详解

    2. 在Spring MVC配置中,通过`InternalResourceViewResolver`类设置默认的字符编码。在XML配置文件中添加以下代码: ```xml &lt;mvc:annotation-driven&gt; &lt;mvc:message-converters&gt; &lt;bean class="org.springframework...

    单文件与多文件上传uploadify控件的java版本

    以Spring MVC为例,你需要创建一个Controller方法来处理文件接收: ```java @RequestMapping(value = "/upload", method = RequestMethod.POST) public @ResponseBody String handleFileUpload(@RequestParam("file...

    EXT异步提交FORM表单

    - **编码问题**:在处理中文字符时,可能会遇到乱码问题。确保前后端的编码一致,并在需要的地方进行字符集转换。 - **跨域问题**:如果EXT所在的域名与后端服务器的域名不一致,则需要处理跨域问题。可以采用CORS...

    SSM集成应用

    - **中文乱码问题**:解决客户端与服务器间字符集不一致导致的问题。 - **自定义参数绑定实现日期转换**:通过自定义Converter或Formatter实现复杂类型的转换。 #### SSM集成 **4.1 整合分析** SSM框架整合主要...

    分享SpringMVC归纳

    SpringMVC是Spring框架的一个模块,它提供了一套轻量级的MVC(Model-View-Controller)架构来帮助开发者构建Web应用程序。SpringMVC的核心组件是DispatcherServlet(前端控制器),它负责接收HTTP请求并将它们分发给...

Global site tag (gtag.js) - Google Analytics