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>

处理之后;

相关推荐
爱敲代码的小鱼10 小时前
springboot原理篇:
java·spring boot·spring
zzzll111110 小时前
如何学习AI Agent?
java·人工智能·学习·程序员·大模型
阿pin11 小时前
Java随笔-GC收集器工作机制
java·开发语言·jvm·gc
2601_9624408411 小时前
计算机毕业设计之jsp旅游网站管理系统
java·开发语言·算法·课程设计·旅游·推荐算法
默默敲代码的徐哥儿11 小时前
八股文整理——后端
java·开发语言·spring boot·后端·学习
折哥的程序人生 · 物流技术专研11 小时前
第2篇:策略模式三大角色拆解与UML
java·设计模式·策略模式·uml·编程入门·行为型模式·扩充系列
李少兄12 小时前
Java CompletableFuture 解析(含常见面试题)
java·开发语言
名字还没想好☜12 小时前
Spring Boot 全局异常处理:@ControllerAdvice 实战
java·spring boot·后端·spring·异常处理
能摆一天是一天12 小时前
Spring ai vectorstore 使用本地模型导致只能匹配可行度为1.0的内容的解决方法笔记
java·笔记·spring
我命由我1234512 小时前
方差(实例实操、与标准差的区别)
java·数据结构·算法·数据分析·java-ee·intellij-idea·idea