我目前正在撰寫一個具有三層(控制器 -> 服務 -> dao)的 spring-mvc (jsp) 專案,我想知道處理來自 dao 呼叫的預期例外的正確方法是什么(例如,嘗試保留一個已經存在的用戶) ,如果它存在,則再次呼叫注冊視圖并顯示一條訊息,說明用戶已經存在),起初我認為在 dao 中捕獲例外(例如 DataIntegrityViolationException)并拋出我的任意檢查例外是個好主意,然后我可以在控制器中為它做一個例外處理程式,但我擔心如果我這樣做,那么我可能會發生沖突,如果我想稍后讓我的服務方法 @Transactional 因為 spring 不知道如何回滾事務。
如果這是正確的,那么我有兩個想法:
當我呼叫服務呼叫 userService.register(..) 時,在控制器中嘗試/捕獲 DataAccessException
在控制器中使用像 userService.findByUsername(username) 這樣的行中的東西(它回傳一個 Optional),如果它存在,我甚至在呼叫 userService.register(..) 之前通知用戶
此外,我們的老師強調遵循 DDD 行為并試圖避免在我們的控制器中泄漏業務邏輯,我擔心這兩種解決方案都會這樣做,但我真的不知道如何處理它。
uj5u.com熱心網友回復:
Spring 已經將受檢查的 JDBC 例外轉換為資訊更豐富的未經檢查的例外,這在服務層事務中表現良好。您的所有自定義檢查例外都會迫使您輸入更多內容。Spring 為您提供了合理的默認值,請充分利用它們。
創建例外處理程式。Spring 有多種方法來實作這一點,它們都不涉及在控制器中為例外撰寫 catch 塊。
將業務邏輯放在服務中,而不是控制器中。似乎您的 findByUsername 和 register 可以組合在一種事務服務方法中。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/324123.html
下一篇:如何使用縮進拋出例外?
