解决springmvc项目中使用过滤器来解决请求方式为post时出现乱码的问题

 更新时间:2020年08月21日 09:53:15   作者:iCanFly.  
这篇文章主要介绍了springmvc项目中使用过滤器来解决请求方式为post时出现乱码的问题,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

在spring项目中,当请求方式为post时,可能在获取数据之后会有乱码的情况,其中一种解决方法就是在拿到请求参数之前设置编码格式为utf-8,如下

 request.setCharacterEncoding("utf-8");
  String strId = request.getParameter("id");
  String strName = request.getParameter("name");
  String strSex = request.getParameter("sex");

但是当有多个处理器方法的时候每个方法中都要设置编码格式就显得过于繁琐,所以推荐第二种解决方案:使用过滤器只要在web.xml中对过滤器进行声明注册就可以了

<!--注册声明过滤器-->
 <filter>
  <filter-name>characterEncodingFilter</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>
<!--强制请求对象的编码格式 使用字符集encoding-->
  <init-param>
   <param-name>forceRequestEncoding</param-name>
   <param-value>true</param-value>
  </init-param>
<!--强制响应对象使用encoding的字符集编码-->
  <init-param>
   <param-name>forceResponseEncoding</param-name>
   <param-value>true</param-value>
  </init-param>
 </filter>
 
 <filter-mapping>
<!--强制所有请求先通过过滤器处理-->
  <filter-name>characterEncodingFilter</filter-name>
  <url-pattern>/*</url-pattern>
 </filter-mapping>

另外,我们可以看一下CharacterEncodingFilter的实现方法的实现就知道为什么要设置后边的encoding,forceRequestEncoding,forceResponseEncoding这三个参数了,因为这三个参数是这个方法中的是三个私有属性

public class CharacterEncodingFilter extends OncePerRequestFilter {
 @Nullable
 private String encoding;
 private boolean forceRequestEncoding;
 private boolean forceResponseEncoding;
 
 public CharacterEncodingFilter() {
  this.forceRequestEncoding = false;
  this.forceResponseEncoding = false;
 }
 
 public CharacterEncodingFilter(String encoding) {
  this(encoding, false);
 }
 
 public CharacterEncodingFilter(String encoding, boolean forceEncoding) {
  this(encoding, forceEncoding, forceEncoding);
 }
 
 public CharacterEncodingFilter(String encoding, boolean forceRequestEncoding, boolean forceResponseEncoding) {
  this.forceRequestEncoding = false;
  this.forceResponseEncoding = false;
  Assert.hasLength(encoding, "Encoding must not be empty");
  this.encoding = encoding;
  this.forceRequestEncoding = forceRequestEncoding;
  this.forceResponseEncoding = forceResponseEncoding;
 }

总结

到此这篇关于springmvc项目中使用过滤器来解决请求方式为post时出现乱码的问题的文章就介绍到这了,更多相关springmvc post请求乱码内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Springboot项目长时间不进行接口操作,提示HikariPool-1警告的解决

    Springboot项目长时间不进行接口操作,提示HikariPool-1警告的解决

    这篇文章主要介绍了Springboot项目长时间不进行接口操作,提示HikariPool-1警告的解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-12-12
  • Java 中jasperReport实现动态列打印的实现代码

    Java 中jasperReport实现动态列打印的实现代码

    这篇文章主要介绍了Java 中jasperReport实现动态列打印的实现代码的相关资料,希望通过本文大家能掌握这部分内容,需要的朋友可以参考下
    2017-09-09
  • JAVA各种OOM代码示例与解决方法

    JAVA各种OOM代码示例与解决方法

    这篇文章主要给大家介绍了关于JAVA各种OOM代码示例与解决方法的相关资料,文中通过示例代码以及图文介绍的非常详细,对大家学习或者使用java具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2020-07-07
  • springboot发布dubbo服务注册到nacos实现方式

    springboot发布dubbo服务注册到nacos实现方式

    这篇文章主要介绍了springboot发布dubbo服务注册到nacos实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-09-09
  • rabbitmq中routingkey的作用说明

    rabbitmq中routingkey的作用说明

    这篇文章主要介绍了rabbitmq中routingkey的作用说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-06-06
  • mybatisplus的连表增强插件mybatis plus join

    mybatisplus的连表增强插件mybatis plus join

    本文主要介绍了mybatisplus的连表增强插件mybatis plus join,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-06-06
  • 解析springboot包装controller返回值问题

    解析springboot包装controller返回值问题

    这篇文章主要介绍了springboot包装controller返回值问题,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-12-12
  • 使用Mybatis遇到的坑之Integer类型参数的解读

    使用Mybatis遇到的坑之Integer类型参数的解读

    这篇文章主要介绍了使用Mybatis遇到的坑之Integer类型参数的解读,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-03-03
  • Java中StringTokenizer的用法简介汇总

    Java中StringTokenizer的用法简介汇总

    StringTokenizer 是出于兼容性的原因而被保留的遗留类(虽然在新代码中并不鼓励使用它),建议所有寻求此功能的人使用 String 的 split 方法或 java.util.regex 包,本文给大家整理了Java StringTokenizer用法,感兴趣的朋友一起看看吧
    2022-07-07
  • Java使用PrepareStatement实现数据的插入与查询操作

    Java使用PrepareStatement实现数据的插入与查询操作

    这篇文章主要为大家详细介绍了Java如何使用PrepareStatement实现数据的插入与查询操作,文中的示例代码讲解详细,感兴趣的可以了解一下
    2022-09-09

最新评论