首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

Spring MVC 中文亂碼終極解決方案:請求、響應、數據庫、服務器全鏈路配置指南

     編輯:Java 綜合教學

亂碼產生的三大核心場景

  1. 表單提交 → Controller 參數亂碼(請求端);
  2. Controller 正常 → 入庫亂碼(數據庫連接端);
  3. 數據庫正常 → 頁面顯示亂碼/問號(響應端)。

場景一:請求參數亂碼(POST 表單)

前置條件

  • JSP 頁面聲明 <%@ page pageEncoding="UTF-8" %>;
  • <form method="post">(GET 請求 Spring 編碼過濾器無效)。

web.xml 配置 CharacterEncodingFilter(務必放在首位)

<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> <!-- 關鍵:強制覆蓋 request/response 編碼 -->
  </init-param>
</filter>
<filter-mapping>
  <filter-name>characterEncodingFilter</filter-name>
  <url-pattern>/*</url-pattern>
</filter-mapping>

場景二:入庫亂碼(JDBC URL 編碼參數)

檢查數據庫、表、字段字符集均為 utf8 或 utf8mb4,然後在連接池配置中追加參數:

<property name="url" value="jdbc:mysql://localhost:3306/dbname?useUnicode=true&characterEncoding=UTF-8" />

注意:若配置文件為 .properties 格式,& 不需轉義;若為 XML 格式,必須寫成 &amp;。

場景三:響應輸出亂碼(JSON/頁面)

Controller 返回 JSON

response.setContentType("application/json;charset=UTF-8");

JSP 頁面頭部聲明

<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8" %>

進階:應用服務器層面配置

Tomcat (server.xml)

<Connector port="8080" protocol="HTTP/1.1"
           connectionTimeout="20000"
           redirectPort="8443"
           URIEncoding="UTF-8"
           useBodyEncodingForURI="true" />

JBoss/WildFly (datasource 配置)

<connection-url>jdbc:mysql://ip/db?useUnicode=true&characterEncoding=UTF-8</connection-url>

MySQL 字符集檢查與修正命令

-- 查看當前字符集
SHOW VARIABLES LIKE 'character_set_%';
-- 修改庫/表/列字符集
ALTER DATABASE dbname CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
ALTER TABLE tblname CONVERT TO CHARACTER SET utf8mb4;
-- 連接級臨時設置
SET NAMES utf8mb4;

排查清單

層級檢查項關鍵配置
頁面pageEncoding / contentTypeUTF-8
請求CharacterEncodingFilter + forceEncodingUTF-8 / true
Controllerresponse.setContentTypecharset=UTF-8
數據庫連接JDBC URL 參數useUnicode=true&characterEncoding=UTF-8
數據庫對象庫/表/列字符集utf8mb4
服務器Connector URIEncodingUTF-8

逐項對照配置,即可徹底消除 Spring MVC 全鏈路中文亂碼問題。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved