SpringMVC 前后端数据交互 中文乱码

ajax 前台传入数据,但是后台接收到的数据中文乱码

首先我们分析一下原因:我们调用接口的时候传入的中文,是没有乱码的

此时我们看一下Java后台接口对应的编码:

  • 默认情况:Servlet容器(如Tomcat)默认使用ISO-8859-1解码请求参数

  • 中文问题:中文字符在ISO-8859-1编码下会变成乱码

我们的程序是跑在tomcat 上面的,自然使用的是默认的编码:ISO-8859-1,我是使用tomcat插件启动的项目,并没有设置编码,所有采用的是默认的编码

如何来解决编码的问题,那就是:

  • 告诉Servlet容器使用UTF-8解码请求体(POST参数)

  • 必须在第一次调用request.getParameter()之前设置才有效

如果在每个接口方法的前面都加上:

request.setCharacterEncoding("UTF-8");

就可以解决中文乱码的原因,但是这样的代码要在所有的接口中写一遍,确实优点不近人情,那么有没有什么好的解决办法,存在一个过滤器是在dispaterServlet 分发任务之前就可以执行,

所以我们可以在设置设置所有的方法都执行某个filter 这样就是统一设置编码了

原生的过滤器:

java 复制代码
public interface Filter {
    default void init(FilterConfig filterConfig) throws ServletException {}
    
    void doFilter(ServletRequest request, ServletResponse response, 
                 FilterChain chain) throws IOException, ServletException;
                 
    default void destroy() {}
}

其实我们只要实现这个接口,就可以了,我们可以写自己的过滤器,也可以使用spring 自带的过滤器

bash 复制代码
<filter>
    <filter-name>encodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
        <param-name>encoding</param-name>
        <param-value>UTF-8</param-value>
    </init-param>
    <init-param>
        <param-name>forceEncoding</param-name>
        <param-value>true</param-value>
    </init-param>
</filter>
<filter-mapping>
    <filter-name>encodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

处理之后;

相关推荐
蒸蒸yyyyzwd4 小时前
cpp对象模型学习笔记1.1-2.8
java·笔记·学习
程序员徐师兄5 小时前
Windows JDK11 下载安装教程,适合新手
java·windows·jdk11 下载安装·jdk11 下载教程
RANCE_atttackkk5 小时前
[Java]实现使用邮箱找回密码的功能
java·开发语言·前端·spring boot·intellij-idea·idea
五岳5 小时前
DTS按业务场景批量迁移阿里云MySQL表实战(下):迁移管理平台设计与实现
java·应用·dts
zhougl9966 小时前
Java 所有关键字及规范分类
java·开发语言
Python 老手6 小时前
Python while 循环 极简核心讲解
java·python·算法
java1234_小锋6 小时前
Java高频面试题:MyISAM索引与InnoDB索引的区别?
java·开发语言
Mr_Xuhhh6 小时前
MySQL函数详解:日期、字符串、数学及其他常用函数
java·数据库·sql
测试开发Kevin7 小时前
小tip:换行符CRLF 和 LF 的区别以及二者在实际项目中的影响
java·开发语言·python
笨手笨脚の7 小时前
Redis: Thread limit exceeded replacing blocked worker
java·redis·forkjoin·thread limit