解决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请求乱码内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java线程中sleep和wait的区别详细介绍

    Java线程中sleep和wait的区别详细介绍

    Java中的多线程是一种抢占式的机制,而不是分时机制。抢占式的机制是有多个线程处于可运行状态,但是只有一个线程在运行
    2012-11-11
  • 三行Java代码实现计算多边形的几何中心点

    三行Java代码实现计算多边形的几何中心点

    因为工作需要计算采煤机工作面的中心点,如果套用数学的计算公式,用java去实现,太麻烦了。本文将利用java几何计算的工具包,几行代码就能求出多变形的中心,简直yyds!还不快跟随小编一起学起来
    2022-10-10
  • SpringBoot项目部署到腾讯云的实现步骤

    SpringBoot项目部署到腾讯云的实现步骤

    本文主要介绍了SpringBoot项目部署到腾讯云的实现步骤,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-01-01
  • 10个微妙的Java编码最佳实践

    10个微妙的Java编码最佳实践

    这篇文章让我与你分享10个微妙的Java编码最佳实践,需要的朋友可以参考下
    2017-11-11
  • Spring Cloud原理详解

    Spring Cloud原理详解

    今天小编就为大家分享一篇关于Spring Cloud原理详解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-02-02
  • Java Spring的数据库开发详解

    Java Spring的数据库开发详解

    这篇文章主要介绍了Spring的数据库开发,主要围绕SpringJDBC和Spring Jdbc Template两个技术来讲解,文中有详细的代码示例,需要的小伙伴可以参考一下
    2023-04-04
  • springboot手写一个自己的starter源码

    springboot手写一个自己的starter源码

    在本篇文章里小编给大家整理了关于springboot手写一个自己的starter源码的全部知识点内容,需要的朋友们学习下。
    2019-06-06
  • Java并发计数器的深入理解

    Java并发计数器的深入理解

    这篇文章主要给大家介绍了关于Java并发计数器的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Java具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-05-05
  • Java设计模式中的抽象工厂模式解读

    Java设计模式中的抽象工厂模式解读

    这篇文章主要介绍了Java设计模式中的抽象工厂模式解读,抽象工厂模式为创建一组相关或相互依赖的对象提供一个接口,而且无需指定他们的具体类,需要的朋友可以参考下
    2023-11-11
  • 详解springMVC两种方式实现多文件上传及效率比较

    详解springMVC两种方式实现多文件上传及效率比较

    本篇文章介绍了springMVC两种方式实现多文件上传及效率比较。springMVC实现多文件上传有两种,一种是字节流的方式进行文件上传,另外一种是使用springMVC包装好的解析器进行上传,有兴趣的可以了解一下。
    2016-12-12

最新评论