`

spring MVC 3.2中@ResponseBody返回乱码的完美解决方案

阅读更多

      本来因为ajax跨域http远程调用时有问题,在服务端响应时用以下方式解决了,但IE8及下有问题。

                response.addHeader("Access-Control-Allow-Origin", "*");

response.addHeader("Access-Control-Allow-Methods", "POST,GET");

response.addHeader("Access-Control-Allow-Credentials", "true");

后来准备再包装一下,自己再提供http接口,在http接口中用httpclient去取数据,但发现springMVC的返回乱码问题搞了我好久,怎么搞都弄不好,网上的各种方法也都不行,最后在stackoverflow上面看到了一个解决方案可行,此为链接地址:http://stackoverflow.com/questions/3616359/who-sets-response-content-type-in-spring-mvc-responsebody 

首先,这个问题在stackoverflow上是三年前提问的,所以有一些方法已经过期废弃了,所以上面可以用的解决方式只有一种,在RequestMapping上添加属性produces:

 

@RequestMapping(value = "/getAllCategory", method = { RequestMethod.GET,

RequestMethod.POST }, produces = "application/json;charset=UTF-8")

@ResponseBody

public String getAllCategory(HttpServletRequest request,

HttpServletResponse response) {

return GYHttpClient.post(GET_PRODUCT_CATEGORY_LIST_URL);

}

 

这是从我的项目中copy下来的,把参数什么的去掉,换成自己的即可。

 

但是上面的解决方案有点不好,要每一个方法都添加这么一句代码,虽然灵活性高,优雅,但是却麻烦。所以我试了其它的方法,但是不生效,后来看一下源码,才发现3.2后AnnotationMethodHandlerAdapter已经过期了,现在用的是RequestMappingHandlerAdapter,但是RequestMappingHandlerAdapter试了一下也不行(理论上这个也是可行,没研究出来 T ^ T)。所以研究了下发现可以声明注解驱动器(不知道是不是这么翻译)的时候的控制编码的转换,结果就这么解决了,太帅气了!

 

<mvc:annotation-driven>  

    <mvc:message-converters>  

        <!-- default StringHttpMessageConverter, solve encoding problem -->  

        <bean class="org.springframework.http.converter.StringHttpMessageConverter">  

            <constructor-arg value="UTF-8" />  

            <property name="writeAcceptCharset" value="false" />  

        </bean>  

    </mvc:message-converters>  

</mvc:annotation-driven> 

 

OK,完美解决。

关于跨域的问题可以参考:"Cross-domain Ajax with Cross-Origin Resource Sharing"

分享到:
评论
3 楼 iceblue123 2016-07-24  
厉害,太感谢楼主了,第二种方法威武!
2 楼 gaozi131 2015-08-14  

感谢啊  折腾了一下午搞定
1 楼 yenshen 2015-07-08  
找了半天,问题终于解决了,感谢!

相关推荐

    spring+mybatis 通过@ResponseBody返回结果中文乱码的解决方法

    spring+mybatis 通过@ResponseBody返回结果中文乱码的解决方法 在使用 Spring+Mybatis 框架时,经常会遇到一个问题,就是通过 @ResponseBody 返回结果时,中文字符会出现乱码的问题。这是因为在 Spring MVC 中,...

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

    在Spring MVC框架中,开发者经常遇到ResponseBody返回的字符串出现乱码的问题,特别是当字符串中包含中文字符时。这是因为Spring MVC默认使用了StringHttpMessageConverter来处理Response Body中的字符串,而这个...

    springMVC3使用@ResponseBody向浏览器返回 json,注意区分jar包前缀

    -- @ResponseBody() spring-mvc 3 xml 配置--&gt; &lt;!--处理 @ResponseBody 中文乱码问题 --&gt; &lt;bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"&gt; ...

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

    总的来说,解决SpringMVC中`@ResponseBody`注解返回中文乱码问题的关键在于正确配置`HttpMessageConverter`,确保其支持UTF-8编码,并将这些配置放在`&lt;mvc:annotation-driven&gt;`元素之前。通过上述方法,可以有效地...

    spring mvc 自學筆記

    在 Spring MVC 中处理中文乱码通常有两种方法: - **设置字符编码过滤器**:通过配置一个全局的字符编码过滤器来解决所有请求的乱码问题。 ```java @WebFilter(urlPatterns = "/*") public class ...

    Spring MVC注解开发总结

    1. **避免Spring错误加载Spring MVC**:在`getServletMappings()`方法中,返回`"/"`以指定Spring MVC处理所有请求,避免Spring容器错误地加载到Spring MVC之外的配置。 2. **乱码处理**:可以通过自定义Filter来...

    Spring MVC面试题(2022最新版)

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

    json 中文乱码解决方案

    ### json 中文乱码解决方案 在处理JSON数据时,经常会出现中文乱码的问题,尤其是在不同编码格式间进行转换时更为常见。本文将详细介绍如何解决JSON中的中文乱码问题,并提供几种简单实用的方法来帮助开发者避免这...

    Spring MVC面试宝典1.pdf

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

    jackon 2.9.1

    在描述中提到了`@ResponseBody`注解,这是Spring MVC框架的一部分。Spring MVC是Spring框架的一个模块,用于构建Web应用程序。`@ResponseBody`是Spring MVC中的一个注解,它告诉Spring框架将方法的返回值直接写入...

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

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

    SpringMVC解决乱码

    SpringMVC乱码解决方案 SpringMVC是一个流行的Java Web框架,用于构建Web应用程序。然而,在使用SpringMVC时,可能会遇到乱码问题,例如在使用@ResponseBody注解时返回的数据出现乱码。在本文中,我们将讨论解决...

    SSM框架整合(解决中文乱码,二级缓存,JSON,事务)

    SSM框架整合是Java开发中常见的一种技术栈组合,包括Spring、Spring MVC和MyBatis。这个项目包针对的是在实际开发中可能会遇到的一些常见问题,如中文乱码、二级缓存、JSON处理以及事务管理。以下是这些知识点的详细...

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

    除了上述的字符编码解决策略,Spring MVC还提供了多种参数绑定注解来处理请求中的不同数据类型: - **`@RequestParam`**:用于绑定HTTP请求参数,适用于GET和POST请求。例如,`@RequestParam("name") String name`...

    Spring MVC的文件下载实例详解

    Spring MVC是Java开发中常用的Web框架,它基于Servlet API构建,提供了模型-视图-控制器(MVC)架构。本文将深入解析如何在Spring MVC中实现文件下载功能,包括文件读取、响应头设置、以及如何处理不同浏览器的兼容...

    springmvc-restful

    在IT行业中,Spring MVC是一个广泛使用的Java Web框架,它提供了构建高效、灵活和模块化的Web应用程序的能力。在处理RESTful API时,Spring MVC扮演着核心角色。本篇将深入探讨"springmvc-restful"主题,特别是关于...

    springmvc开发笔记

    ### Spring MVC 开发笔记:解决异步刷新时的乱码问题 #### 一、问题背景与分析 在使用Spring MVC框架进行Web应用开发时,经常会遇到一个常见的问题——异步请求(尤其是AJAX请求)返回的数据出现乱码现象。这个...

    SpringMVC面试题.pdf

    Spring MVC 是一个强大的Java Web开发框架,它遵循MVC(Model-View-Controller)设计模式,使得开发者能够将业务逻辑、视图呈现和控制层逻辑有效地分离,从而提高代码的可维护性和可测试性。Spring MVC的核心组件...

    SpringMVC面试题(2020最新版).pdf

    Spring MVC 是一个基于Java的轻量级Web框架,遵循MVC设计模式,旨在将Web层的各个组件职责明确,简化开发。它主要包括前端控制器DispatcherServlet、处理器映射器HandlerMapping、处理器适配器HandlerAdapter、...

    SpringMVC+Mybatis JAVA配置 非XML

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

Global site tag (gtag.js) - Google Analytics