Spring MVC 最新响应中乱码解决方式
@author:mufeng
@email:mufeng.yu@outlook.com
以前的解决办法:
<!--启用包扫描-->
<context:component-scan base-package="com.mufeng"/>
<!--放行静态文件-->
<mvc:default-servlet-handler/>
<!--开启SpringMVC注解开发并解决乱码问题-->
<mvc:annotation-driven>
<mvc:message-converters>
<bean class="org.springframework.http.converter.StringHttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<!--通过对StringHttpMessageConverter类的List做添加,修改响应的编码-->
<value>text/plain;charset=UTF-8</value>
</list>
</property>
</bean>
</mvc:message-converters>
</mvc:annotation-driven>
这是比较通用的一种方法,但是它有一种缺点,就是你响应一种数据添加一种,比较麻烦。而且在之前的版本中默认的响应类型为text/html;charset=ISO-8859-1
,且其被final关键字修饰,无法进行修改。
但是在5.2.19.RELEASE之后的版本中,通过阅读源码可知:
StringHttpMessageConverter
的父类AbstractHttpMessageConverter<T>
中有了这样一行代码:
public abstract class AbstractHttpMessageConverter<T> implements HttpMessageConverter<T> {
.....
@Nullable
private Charset defaultCharset;
.....
虽然它默认的编码集还是ISO-8859-1
,但是它已不再被final修饰,这就意味着我们可以在Spring配置文件中直接对其进行注入,修改Spring http响应的默认编码集。代码如下:
<!--解决乱码问题-->
<mvc:annotation-driven>
<mvc:message-converters>
<bean class="org.springframework.http.converter.StringHttpMessageConverter">
<property name="defaultCharset">
<value>UTF-8</value>
</property>
</bean>
</mvc:message-converters>
这种方法更简洁高效,而且通过此方法我们不需要在前端代码中处理响应时担心后端穿过来的编码集错误。
我是沐风,这是我的原创文章。欢迎指正。