客戶端發送 HTTP POST 請求,伺服器端 (Servlet/Controller) 通過 `request.getParameter()` 或 `@RequestParam` 獲取參數時均為 `null`,但請求本身已到達伺服器。
**表單提交**必須設定:`Content-Type: application/x-www-form-urlencoded` (預設) 或 `multipart/form-data` (含檔案)。
**AJAX/JSON 提交**必須設定:`Content-Type: application/json;charset=UTF-8`。
檢查方式:瀏覽器 DevTools → Network → Request Headers 確認。
**常見錯誤**:設定 `application/json` 卻發送表單字串,或反之。
若程式碼中將參數拼接在 URL (`/api?key=val`) 但方法標註 `@PostMapping`,Spring MVC 預設不解析 URL 參數到 `@RequestParam` (需配置)。
**解決**:參數放請求體,或在方法參數加 `@RequestParam` 並確保 `HttpServletRequest` 可獲取查詢字串。
若自定義 `Filter` 或 `HandlerInterceptor` 中調用了 `request.getInputStream()` 或 `request.getReader()`,**流只能讀取一次**,後續 Controller 無法再讀取。
**解決**:使用 `ContentCachingRequestWrapper` 包裝請求,或避免在過濾器中讀取請求體。
Java 區分大小寫。前端發送 `userName`,後端接收 `username` → `null`。
**解決**:統一命名規範 (camelCase),或使用 `@RequestParam("userName")` 顯式映射。
請求體含中文但未指定 `charset=UTF-8`,伺服器按 ISO-8859-1 解析導致亂碼或解析異常。
**解決**:全鏈路強制 UTF-8:`
POST 參數為 null 90% 是 **Content-Type 與請求體格式不匹配** 或 **請求體被提前讀取**。按上述清單逐項排查,通常 5 分鐘內定位問題。