`
shidan66
  • 浏览: 65423 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Spring mvc @ResponseBody乱码问题

 
阅读更多

Spring MVC中使用@ResponseBody向客户端返回含有中文的文本内容的时候,可能会出现乱码,即使已经使用编码过滤器,也不能避免。主要原因是Spring MVC使用的MessageConverter默认使用的是ISO-8859-1编码。

public class StringHttpMessageConverter extends AbstractHttpMessageConverter<String> {

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

	private final Charset defaultCharset;

	private final List<Charset> availableCharsets;

	private boolean writeAcceptCharset = true;
        。。。
        。。。
        public StringHttpMessageConverter() {
		this(DEFAULT_CHARSET);
	}

	/**
	 * A constructor accepting a default charset to use if the requested content
	 * type does not specify one.
	 */
	public StringHttpMessageConverter(Charset defaultCharset) {
		super(new MediaType("text", "plain", defaultCharset), MediaType.ALL);
		this.defaultCharset = defaultCharset;
		this.availableCharsets = new ArrayList<Charset>(Charset.availableCharsets().values());
	}
}

网上通常的做法要么自己写代码转换,要么是写一个类继承 AbstractHttpMessageConverter,重新定义默认编码。其实我们可以直接调用上述Bean的有参构造方法来创建实例,然后给传一个我们需要的编码的Charset对象即可。但是Charset类没有可用的构造器,只能通过一个静态的forName方法来创建对象,这样其实类似于使用静态工厂方法来创建bean,所以按照如下配置即可:

<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
		<property name="messageConverters">
        <list> 
            <bean class="org.springframework.http.converter.StringHttpMessageConverter">
            	<constructor-arg>
            		<bean id="defaultCharset" class="java.nio.charset.Charset" factory-method="forName">
            			<constructor-arg value="UTF-8"/>
            		</bean>
            	</constructor-arg>  
                <property name="supportedMediaTypes">  
                    <list>  
                        <bean class="org.springframework.http.MediaType">  
                            <constructor-arg index="0" value="text" />  
                            <constructor-arg index="1" value="plain" />  
                            <constructor-arg index="2" value="UTF-8" />  
                        </bean>  
                        <bean class="org.springframework.http.MediaType">  
                              <constructor-arg index="0" value="application"/>  
			      <constructor-arg index="1" value="json"/>  
			      <constructor-arg index="2" value="UTF-8"/> 
                    	</bean> 
                    </list> 
                     
                </property>  
            </bean>
            
        </list>  
     </property> 
</bean>

 

 

        我这里使用的是

org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter

 ,在spring mvc 3.1之前的版本中,使用的是

org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter

 

 

 

 

 

分享到:
评论

相关推荐

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

    --处理 @ResponseBody 中文乱码问题 --&gt; &lt;bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"&gt; &lt;property name="messageConverters"&gt; &lt;list&gt; &lt;!-- Support...

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

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

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

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

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

    在使用 Spring+Mybatis 框架时,经常会遇到一个问题,就是通过 @ResponseBody 返回结果时,中文字符会出现乱码的问题。这是因为在 Spring MVC 中,默认的字符编码是 ISO-8859-1,而中文字符需要使用 UTF-8 编码来...

    spring mvc 自學筆記

    这里提到的“验证单例多用构造方法”可能是指 Spring MVC 中单例 Bean 的生命周期问题。Spring 管理的 Bean 默认是单例模式,即在整个应用中只有一个实例。当 Bean 采用构造方法初始化时,无论多少次请求,构造函数...

    Spring MVC注解开发总结

    2. **乱码处理**:可以通过自定义Filter来处理编码问题,例如设置请求和响应的字符编码。 3. **其他注解**:Spring MVC还有许多其他注解,如`@PathVariable`用于处理URI模板变量,`@RequestParam`用于处理请求参数...

    Spring MVC面试题(2022最新版)

    Spring MVC可以通过`@ResponseBody`注解轻松地与AJAX进行交互。当控制器方法上标注了`@ResponseBody`时,Spring MVC会将方法的返回值直接序列化为JSON或XML格式,并作为HTTP响应体返回给客户端。前端可以通过AJAX...

    Spring MVC面试宝典1.pdf

    ##### 3.4 如何解决POST请求中文乱码问题,GET的又如何处理呢? - **POST请求**:在web.xml中配置过滤器CharacterEncodingFilter来设置字符编码。 - **GET请求**:同样可以通过配置过滤器解决,也可以通过修改Tomcat...

    jackon 2.9.1

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

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

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

    springmvc-restful

    在IT行业中,Spring MVC是一个广泛使用的Java Web框架,它提供了构建...而文件"SpringMVC_05_restful"可能包含了实现上述功能的代码示例,你可以通过查阅这些文件,加深对Spring MVC处理RESTful API及乱码问题的理解。

    SpringMVC+Mybatis JAVA配置 非XML

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

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

    总结,Spring MVC通过`@ResponseBody`注解和指定`produces`属性可以方便地返回XML和JSON格式的数据。返回XML时需要关注字符编码,返回JSON时则可以直接返回对象。避免一些错误尝试,如直接返回XML字符串或未序列化的...

    Spring MVC的文件下载实例详解

    本文将深入解析如何在Spring MVC中实现文件下载功能,包括文件读取、响应头设置、以及如何处理不同浏览器的兼容性问题。 首先,文件下载的实现思路是将文件内容读取到内存中,通常使用字节数组来存储文件内容,再...

    SpringMVC解决乱码

    然而,在使用SpringMVC时,可能会遇到乱码问题,例如在使用@ResponseBody注解时返回的数据出现乱码。在本文中,我们将讨论解决SpringMVC乱码问题的两种方法。 方法一:配置AnnotationMethodHandlerAdapter 在...

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

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

    springmvc开发笔记

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

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

    处理中文乱码问题,可以设置HttpServletRequest的编码方式,对于POST请求,可以在过滤器中设置request.setCharacterEncoding("UTF-8");GET请求一般默认处理正确,但如果URL编码了,也需要解码。 Spring MVC的异常...

    SpringMVC面试题.pdf

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

    SpringMVC面试题(2024最新版).docx

    Spring MVC 是一个强大的Java Web开发框架,用于构建可维护、模块化的Web应用程序。它遵循Model-View-Controller(MVC)设计模式,有效地将业务逻辑、数据和用户界面分离,提高了开发效率和代码的可测试性。 Spring...

Global site tag (gtag.js) - Google Analytics