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
。
相关推荐
--处理 @ResponseBody 中文乱码问题 --> <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"> <property name="messageConverters"> <list> <!-- Support...
在Spring MVC框架中,开发者经常遇到ResponseBody返回的字符串出现乱码的问题,特别是当字符串中包含中文字符时。这是因为Spring MVC默认使用了StringHttpMessageConverter来处理Response Body中的字符串,而这个...
总的来说,解决SpringMVC中`@ResponseBody`注解返回中文乱码问题的关键在于正确配置`HttpMessageConverter`,确保其支持UTF-8编码,并将这些配置放在`<mvc:annotation-driven>`元素之前。通过上述方法,可以有效地...
在使用 Spring+Mybatis 框架时,经常会遇到一个问题,就是通过 @ResponseBody 返回结果时,中文字符会出现乱码的问题。这是因为在 Spring MVC 中,默认的字符编码是 ISO-8859-1,而中文字符需要使用 UTF-8 编码来...
这里提到的“验证单例多用构造方法”可能是指 Spring MVC 中单例 Bean 的生命周期问题。Spring 管理的 Bean 默认是单例模式,即在整个应用中只有一个实例。当 Bean 采用构造方法初始化时,无论多少次请求,构造函数...
2. **乱码处理**:可以通过自定义Filter来处理编码问题,例如设置请求和响应的字符编码。 3. **其他注解**:Spring MVC还有许多其他注解,如`@PathVariable`用于处理URI模板变量,`@RequestParam`用于处理请求参数...
Spring MVC可以通过`@ResponseBody`注解轻松地与AJAX进行交互。当控制器方法上标注了`@ResponseBody`时,Spring MVC会将方法的返回值直接序列化为JSON或XML格式,并作为HTTP响应体返回给客户端。前端可以通过AJAX...
##### 3.4 如何解决POST请求中文乱码问题,GET的又如何处理呢? - **POST请求**:在web.xml中配置过滤器CharacterEncodingFilter来设置字符编码。 - **GET请求**:同样可以通过配置过滤器解决,也可以通过修改Tomcat...
在描述中提到了`@ResponseBody`注解,这是Spring MVC框架的一部分。Spring MVC是Spring框架的一个模块,用于构建Web应用程序。`@ResponseBody`是Spring MVC中的一个注解,它告诉Spring框架将方法的返回值直接写入...
总结来说,Spring MVC中处理Controller的字符编码问题主要是通过设置响应的`Content-Type`,使用`@RequestMapping`的`produces`属性,或者直接操作`HttpServletResponse`来指定字符集。同时,了解如何使用不同的参数...
在IT行业中,Spring MVC是一个广泛使用的Java Web框架,它提供了构建...而文件"SpringMVC_05_restful"可能包含了实现上述功能的代码示例,你可以通过查阅这些文件,加深对Spring MVC处理RESTful API及乱码问题的理解。
1,搭建SpringMVC 2,加载properties配置文件 3,集成mybatis ...7,解决@ResponseBody return String的中文乱码问题 8,配置静态资源映射ResourceHandlers 9,配置ViewControllers 10,配置filter 11,配置拦截器
总结,Spring MVC通过`@ResponseBody`注解和指定`produces`属性可以方便地返回XML和JSON格式的数据。返回XML时需要关注字符编码,返回JSON时则可以直接返回对象。避免一些错误尝试,如直接返回XML字符串或未序列化的...
本文将深入解析如何在Spring MVC中实现文件下载功能,包括文件读取、响应头设置、以及如何处理不同浏览器的兼容性问题。 首先,文件下载的实现思路是将文件内容读取到内存中,通常使用字节数组来存储文件内容,再...
然而,在使用SpringMVC时,可能会遇到乱码问题,例如在使用@ResponseBody注解时返回的数据出现乱码。在本文中,我们将讨论解决SpringMVC乱码问题的两种方法。 方法一:配置AnnotationMethodHandlerAdapter 在...
SSM框架整合是Java开发中常见的一种技术栈组合,包括Spring、Spring MVC和MyBatis。这个项目包针对的是在实际开发中可能会遇到的一些常见问题,如中文乱码、二级缓存、JSON处理以及事务管理。以下是这些知识点的详细...
### Spring MVC 开发笔记:解决异步刷新时的乱码问题 #### 一、问题背景与分析 在使用Spring MVC框架进行Web应用开发时,经常会遇到一个常见的问题——异步请求(尤其是AJAX请求)返回的数据出现乱码现象。这个...
处理中文乱码问题,可以设置HttpServletRequest的编码方式,对于POST请求,可以在过滤器中设置request.setCharacterEncoding("UTF-8");GET请求一般默认处理正确,但如果URL编码了,也需要解码。 Spring MVC的异常...
Spring MVC 是一个强大的Java Web开发框架,它遵循MVC(Model-View-Controller)设计模式,使得开发者能够将业务逻辑、视图呈现和控制层逻辑有效地分离,从而提高代码的可维护性和可测试性。Spring MVC的核心组件...
Spring MVC 是一个强大的Java Web开发框架,用于构建可维护、模块化的Web应用程序。它遵循Model-View-Controller(MVC)设计模式,有效地将业务逻辑、数据和用户界面分离,提高了开发效率和代码的可测试性。 Spring...