1. 程式人生 > 程式設計 >解決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;
 }

總結

到此這篇關於springmvc專案中使用過濾器來解決請求方式為post時出現亂碼的問題的文章就介紹到這了,更多相關springmvc post請求亂碼內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!