在 SpringMVC 專案中,處理 POST 請求時若未正確配置字元編碼過濾器,中文參數極易產生亂碼。根本原因在於 Tomcat 預設使用 ISO-8859-1 解碼請求體,而瀏覽器通常以 UTF-8 編碼發送表單資料。解決方案是註冊 Spring 內建的 CharacterEncodingFilter,強制統一請求與回應的編碼為 UTF-8。
在 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>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>characterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
true 時,強制覆蓋請求與回應原有的編碼設定(request.setCharacterEncoding() 與 response.setCharacterEncoding()),確保過濾器生效。若專案使用 Spring Boot,無需手動配置 web.xml,只需在 application.yml 中啟用即可:
server:
servlet:
encoding:
charset: UTF-8
force: true
enabled: true
此外,確保資料庫連線 URL、JSP 頁面指令(<%@ page pageEncoding="UTF-8" %>)、HTML Meta 標籤(<meta charset="UTF-8">)全鏈路統一為 UTF-8,才能徹底杜絕亂碼。