Tomcat 8/9 預設將 GET 參數以 **ISO-8859-1** 解碼,若前端傳 UTF-8 會產生亂碼。雖然可在 server.xml 設定 URIEncoding="UTF-8",但:
@WebFilter("/*")
public class EncodingFilter implements Filter {
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain)
throws IOException, ServletException {
req.setCharacterEncoding("UTF-8");
resp.setCharacterEncoding("UTF-8");
chain.doFilter(req, resp);
}
}
同樣需在 Filter 或 Controller 入口呼叫 req.setCharacterEncoding("UTF-8") (必須在讀取參數前)。
**不要仰賴 Tomcat 預設行為**,專案啟動即註冊 Encoding Filter,確保全站 GET/POST 皆正確處理 UTF-8,避免遷移容器時出現編碼災難。