4 回答

TA貢獻1799條經驗 獲得超9個贊
我習慣的做法是:
對于DAO層查詢不到結果的情況,返回NULL。對于連接失敗等內部問題,拋異常
Service層需要檢查NULL,然后返回NotFoundException。連接失敗等異常不管,直接往上拋
在Controller層面,通過Spring MVC的Controller Advice統一處理異常。根據不同的異常轉成合理的Http status和message返回給客戶端

TA貢獻1772條經驗 獲得超5個贊
dao是與數據庫打交道的,關異常什么事,所有的業務異常都應該在service層拋出,
舉個列子,用戶名不能重復,你dao一個findByName(String name)方法,這個方法只是查詢數據改名稱是否存在,難道還要把你業務綁定到dao層?

TA貢獻1860條經驗 獲得超9個贊

TA貢獻1890條經驗 獲得超9個贊
我認為最合理的做法:
1、dao層不捕獲異常、不拋出異常:spring框架將底層的數據庫checked異常封裝成unchecked異常了
2、service層捕獲異常,并拋出自定義unchecked異常,異常中不定義狀態碼:checked異常默認情況事務不會回滾
3、controller層捕獲異常,并拋出自定義異常,異常類中定義需要返回的HTTP狀態碼
4、exceptionHandler中統一處理所有異常
但是,這樣會造成controller比較臃腫,
所以,很多項目使用偷懶的辦法,service中拋出的異常定義狀態碼,controller不捕獲保持代碼簡潔,由exceptionHandler統一處理
添加回答
舉報