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,轉換失敗。
null。// 實體類改用 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) { /* 處理非數字 */ }
}
// 繼續查詢...
}
Converter<String, Long>,空串返回 null,註冊到 ConversionService。@InitBinder
public void initBinder(WebDataBinder binder) {
binder.registerCustomEditor(String.class, new StringTrimmerEditor(true));
// 空串轉為 null,再配合 Long 類型即可正常綁定
}
方案二最簡單通用;方案四適合全局統一處理。切勿只判斷 == "",應用正則或 StringUtils.isNumeric 防禦非數字輸入。