亲宝软件园·资讯

展开

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

iCanFly. 人气:0
想了解解决springmvc项目中使用过滤器来解决请求方式为post时出现乱码的问题的相关内容吗,iCanFly.在本文为您仔细讲解springmvc post请求乱码的相关知识和一些Code实例,欢迎阅读和指正,我们先划重点:springmvc,post请求乱码,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;
 }

总结

加载全部内容

相关教程
猜你喜欢
用户评论