首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

Spring MVC @ModelAttribute 實現 Controller 通用預處理邏輯

     編輯:Java 綜合教學

Spring MVC @ModelAttribute 實現 Controller 通用預處理邏輯

在 Controller 中,若多個 @RequestMapping 方法需要共同的初始化邏輯(如查詢用戶信息、設置菜單數據),使用 @ModelAttribute 註解的方法會在每個請求處理方法之前自動執行,避免重複代碼。

使用示例

@Controller
@RequestMapping("/user")
public class UserController {
    
    // 在每個 @RequestMapping 方法前執行
    @ModelAttribute
    public void initUser(HttpServletRequest request, Model model) {
        User user = getCurrentUser(request);
        model.addAttribute("currentUser", user);  // 所有視圖可直接訪問
        model.addAttribute("menus", menuService.getUserMenus(user.getId()));
    }
    
    @RequestMapping("/profile")
    public String profile() {
        // 直接使用 currentUser、menus
        return "user/profile";
    }
    
    @RequestMapping("/settings")
    public String settings() {
        return "user/settings";
    }
}

執行順序

  1. 執行所有 @ModelAttribute 方法(按聲明順序)
  2. 將返回值放入 Model(key 為返回類型簡單類名或指定 value)
  3. 執行目標 @RequestMapping 方法
  4. 渲染視圖

進階用法

// 返回值自動放入 Model,key 為 "userVo"
@ModelAttribute("userVo")
public UserVo prepareUserVo(@RequestParam("id") Long id) {
    return userService.findById(id);
}

@RequestMapping("/detail")
public String detail(@ModelAttribute("userVo") UserVo userVo) {
    // 直接注入準備好的對象
    return "user/detail";
}

注意事項

  • @ModelAttribute 方法每次請求都會執行,避免耗時操作,必要時緩存
  • 可配合 @SessionAttributes 實現跨請求數據共享
  • 返回 void 時需手動 model.addAttribute()
  • 異常處理:拋出異常會進入 @ExceptionHandler,不影響其他 @ModelAttribute 執行

總結

@ModelAttribute 是 Spring MVC 提供的優雅預處理機制,適合提取通用的模型準備邏輯,保持 Controller 方法專注業務處理。善用此特性可顯著減少樣板代碼。

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