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

Spring MVC 表單查詢:空值導致數據類型轉換異常的解決

     編輯:程式設計疑難解答

錯誤堆疊

Failed to convert property value of type 'java.lang.String' to required type 'long' for property 'oid';
nested exception is java.lang.NumberFormatException: For input string: ""

原因

前端提交空字串 "",Spring 嘗試綁定到 Long 類型屬性 oid,轉換失敗。

解決方案

  1. 前端攔截:提交前判斷為空則不發送該參數,或發送 null。
  2. 後端使用包裝類 + 手動轉換:
    // 實體類改用 Long(可為 null)
    private Long oid;
    
    // Controller 參數改為 String,手動轉換
    @GetMapping("/search")
    public String search(@RequestParam(required=false) String oidStr) {
        Long oid = null;
        if (StringUtils.isNotBlank(oidStr)) {
            try { oid = Long.parseLong(oidStr); }
            catch (NumberFormatException e) { /* 處理非數字 */ }
        }
        // 繼續查詢...
    }
  3. 自定義類型轉換器:實現 Converter<String, Long>,空串返回 null,註冊到 ConversionService。
  4. 使用 @InitBinder 註冊 StringTrimmerEditor:
    @InitBinder
    public void initBinder(WebDataBinder binder) {
        binder.registerCustomEditor(String.class, new StringTrimmerEditor(true));
        // 空串轉為 null,再配合 Long 類型即可正常綁定
    }

建議

方案二最簡單通用;方案四適合全局統一處理。切勿只判斷 == "",應用正則或 StringUtils.isNumeric 防禦非數字輸入。

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