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>

处理之后;

相关推荐
李贺梖梖4 小时前
DAY23 单例设计模式、多例设计模式、枚举、工厂设计模式、动态代理
java
武昌库里写JAVA4 小时前
Java设计模式之工厂模式
java·vue.js·spring boot·后端·sql
赛姐在努力.6 小时前
SpringMVC中的常用注解及使用方法
java·spring
让我上个超影吧7 小时前
黑马点评秒杀优化和场景补充
java
寻星探路7 小时前
Java EE初阶启程记06---synchronized关键字
java·java-ee
沉木渡香7 小时前
【VSCode中Java开发环境配置的三个层级之Maven篇】(Windows版)
java·vscode·maven
EnCi Zheng8 小时前
Spring Boot 4.0.0-SNAPSHOT @Configuration 问题解决指南
java·spring boot·spring
海上生明月丿8 小时前
在IDEA中使用Git
java·git·intellij-idea
托比-马奎尔9 小时前
Redis7内存数据库
java·redis·后端
鹅是开哥9 小时前
Redis的零食盒满了怎么办?详解缓存淘汰策略
java·redis·缓存·bootstrap