首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

Spring MVC 表單綁定對象:編號欄位輸入漢字導致 400 錯誤

     編輯:程式設計疑難解答

現象

表單三個欄位:編號 (`Integer`)、姓名 (`String`)、性別 (`String`)。僅在編號欄輸入漢字提交時拋出 The request sent by the client was syntactically incorrect. (HTTP 400)。

原因

Spring MVC 自動將請求參數綁定到 `UserInfo` 對象。`userId` 類型為 `Integer`,提交非數字字符串 (如「測試」) 時,**類型轉換失敗**,拋出 `TypeMismatchException`,默認返回 400。

解決方案

  1. 前端驗證 (必做):編號欄添加 `type="number"` 或 JS 正則攔截非數字輸入。
  2. 後端優雅處理:
    • 全局異常處理器捕獲 `TypeMismatchException`,返回友好提示或重導表單頁攜帶錯誤信息。
    • 或將 `userId` 改為 `String` 綁定,Controller 內手動校驗轉換。
  3. 自定義類型轉換器:實現 `Converter`,非數字返回 `null` 或默認值,註冊到 `FormattingConversionService`。

代碼示例:全局異常處理

@ControllerAdvice
public class GlobalExceptionHandler {
    @ExceptionHandler(TypeMismatchException.class)
    public String handleTypeMismatch(TypeMismatchException e, Model model) {
        model.addAttribute("error", "編號必須為數字");
        return "user_form"; // 返回表單頁
    }
}

UTF-8 過濾器確認

提供的 `UTFFilter` 配置正確 (`request.setCharacterEncoding("utf-8")`),但**必須在讀取參數前執行** (Filter 順序靠前),且對 `multipart/form-data` 無效 (需 `MultipartFilter` 或 `StandardServletMultipartResolver`)。

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