在Spring的MVC中,如果你使用的是中文,用的是UTF-8编码,有的时候我们会直接返回一个文本给前端的AJAX调用。Controllor中的代码如下:
@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之后进行修改响应类型。好在该类提供了setSupportedMediaTypes方法可以进行设置。所以实现的代码如下:
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;
}
}
然后在配置文件上加入:
<beans:bean class="com.walmart.bestsales.util.UTF8StringBeanPostProcessor"></beans:bean>
这样就成功实现了UTF8编码的输出。
小结:采用BeanPostProcessor实现的好处就是不对已有的代码做修改,如果以后升级Spring也容易进行兼容。在国际化的大环境下,默认值至少也应该是UTF-8呀。
分享到:
相关推荐
总结来说,解决Spring MVC中ResponseBody返回String类型中文乱码的关键在于修改StringHttpMessageConverter的默认字符集,使其支持UTF-8编码。这可以通过自定义配置或使用BeanPostProcessor实现,后者具有更高的灵活...
### Spring MVC 中的乱码及 RESTful 风格支持 #### 解决乱码问题 在 Spring MVC 中处理中文乱码通常有两种方法: - **设置字符编码过滤器**:通过配置一个全局的字符编码过滤器来解决所有请求的乱码问题。 ```java...
在Spring MVC中,可以通过返回一个String对象来实现重定向或转发。对于重定向,可以使用"redirect:"前缀;对于转发,则直接返回视图名称即可。 ``` // 重定向 public String handleRequest(HttpServletRequest ...
### Spring MVC面试宝典知识点详解 #### 一、SpringMVC简介 ##### 1.1 什么是SpringMVC? SpringMVC是一个基于Java的轻量级Web应用框架,该框架遵循MVC(Model-View-Controller)设计模式,旨在简化Web层的开发。...
本文将详细介绍如何解决JSON中的中文乱码问题,并提供几种简单实用的方法来帮助开发者避免这类问题的发生。 #### 一、问题背景与原因分析 在Web开发中,前后端之间传递的数据格式往往采用JSON(JavaScript Object ...
总结来说,Spring MVC中处理Controller的字符编码问题主要是通过设置响应的`Content-Type`,使用`@RequestMapping`的`produces`属性,或者直接操作`HttpServletResponse`来指定字符集。同时,了解如何使用不同的参数...
### Spring MVC 开发笔记:解决异步刷新时的乱码问题 #### 一、问题背景与分析 ...无论选择哪种方案,都可以确保在Spring MVC开发过程中,异步请求能够正确地处理中文等非ASCII字符,避免乱码问题的发生。
例如,在Spring MVC中,可以在配置文件中指定`<filter>`处理编码问题,或者在Controller方法中使用`@RequestParam(value = "paramName", required = false, defaultValue = "", encoding = "UTF-8")`注解。...
1,搭建SpringMVC 2,加载properties配置文件 3,集成mybatis ...7,解决@ResponseBody return String的中文乱码问题 8,配置静态资源映射ResourceHandlers 9,配置ViewControllers 10,配置filter 11,配置拦截器
在开发Web应用时,Spring MVC和Ajax的交互过程中,经常遇到中文乱码的问题。这个问题主要出现在数据从服务器传输到客户端的过程中,由于编码设置不正确,导致中文字符无法正常显示。以下将详细介绍四种解决Spring ...
在这个例子中,`Result`类包含了状态信息,通过`@ResponseBody`注解,Spring MVC会将`Result`对象转换为JSON格式并返回给客户端。 3. **返回数据的错误尝试** - **错误尝试1**:将XML数据转换为String直接返回,...
在Spring MVC框架中,文件下载是一项常见的功能,用于允许用户从服务器端获取并保存文件到本地计算机。在本文中,我们将深入探讨如何实现一个完整的文件下载实例,包括从磁盘读取文件、设置适当的响应头以及处理不同...
1,搭建SpringMVC 2,加载properties配置文件 3,集成mybatis ...7,解决@ResponseBody return String的中文乱码问题 8,配置静态资源映射ResourceHandlers 9,配置ViewControllers 10,配置filter 11,配置拦截器
在`mvc:annotation-driven`标签内,配置`StringHttpMessageConverter`,明确指定字符编码为UTF-8,以防止JSON序列化和反序列化过程中的乱码问题。 ```xml <mvc:annotation-driven> <mvc:message-converters ...
根据题目提供的示例代码,可以看到定义了一个名为`MainController`的类,该类使用了`@Controller`注解,表明这是一个Spring MVC控制器类。 在这个类中,有一个成员变量`sysId`,并通过`@Value("${sysId}")`注解来...
2. 在Spring MVC配置中,通过`InternalResourceViewResolver`类设置默认的字符编码。在XML配置文件中添加以下代码: ```xml <mvc:annotation-driven> <mvc:message-converters> <bean class="org.springframework...
以Spring MVC为例,你需要创建一个Controller方法来处理文件接收: ```java @RequestMapping(value = "/upload", method = RequestMethod.POST) public @ResponseBody String handleFileUpload(@RequestParam("file...
- **编码问题**:在处理中文字符时,可能会遇到乱码问题。确保前后端的编码一致,并在需要的地方进行字符集转换。 - **跨域问题**:如果EXT所在的域名与后端服务器的域名不一致,则需要处理跨域问题。可以采用CORS...
- **中文乱码问题**:解决客户端与服务器间字符集不一致导致的问题。 - **自定义参数绑定实现日期转换**:通过自定义Converter或Formatter实现复杂类型的转换。 #### SSM集成 **4.1 整合分析** SSM框架整合主要...
SpringMVC是Spring框架的一个模块,它提供了一套轻量级的MVC(Model-View-Controller)架构来帮助开发者构建Web应用程序。SpringMVC的核心组件是DispatcherServlet(前端控制器),它负责接收HTTP请求并将它们分发给...