當表單只提交 name、address、age 三個欄位,但實體類還包含 pass 等其他屬性時,直接綁定會導致未提交的屬性變成 null,造成資料遺失。

@ModelAttribute
public void getUsers(@RequestParam(value="name", required=false) String name, Map<String, Object> map) {
if (name != null) {
System.out.println("調用 ModelAttribute");
// 模擬從資料庫查詢完整物件
User users = new User("cjh", "123", "123@qq.com", "China");
System.out.println("從資料庫獲取物件:" + users);
map.put("user", users); // key 必須與目標方法參數名一致
}
}
@RequestMapping("/getInfo")
public String getServletAPI(User user) {
System.out.println("修改後的物件:" + user);
return "hello";
}
Map,key 必須與目標方法參數名相同(此處為 user)@ModelAttribute 修飾的方法會在該控制器的每個請求方法執行前都執行一次@RequestMapping 方法的參數名完全一致
最終 pass 保持資料庫原值 123,未被覆蓋為 null。