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

Service 拋出異常在 Action 捕獲:Spring 事務與 Struts2 異常傳播

     編輯:程式設計綜合問答

標準做法

  1. Service 層:拋出**受檢異常** 或**運行時異常**,**不捕獲**,配合 @Transactional(rollbackFor = Exception.class) 回滾事務。
    @Service
    @Transactional(rollbackFor = Exception.class)
    public class UserService {
        public void transfer(...) throws InsufficientBalanceException {
            if (balance < amount) throw new InsufficientBalanceException("餘額不足");
            // 更新資料庫...
        }
    }
    
  2. Action/Controller 層:捕獲具體異常,轉為用戶友好訊息或結果頁。
    @Controller
    public class UserAction {
        @Autowired UserService userService;
        public String transfer() {
            try {
                userService.transfer(...);
                return "success";
            } catch (InsufficientBalanceException e) {
                addActionError(e.getMessage());
                return "input";
            }
        }
    }
    
  3. 全域異常處理 (Spring MVC):@ControllerAdvice + @ExceptionHandler 統一處理。

關鍵點

  • Service **不吞噬異常**,讓事務管理器感知並回滾。
  • Action 僅負責**表現層轉換**,不處理業務邏輯。
  • 運行時異常 (RuntimeException) 會自動觸發回滾,受檢異常需在 rollbackFor 指定。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved