我認爲最合理的作法:html
一、dao層不捕獲異常、不拋出異常:spring框架將底層的數據庫checked異常封裝成unchecked異常了java
二、service層捕獲異常,並拋出自定義unchecked異常,異常中不定義狀態碼:checked異常默認狀況事務不會回滾web
三、controller層捕獲異常,並拋出自定義異常,異常類中定義須要返回的HTTP狀態碼:API文檔一眼就能夠明確全部的返回碼spring
四、exceptionHandler中統一處理全部異常數據庫
可是,這樣會形成controller比較臃腫,segmentfault
因此,不少項目使用偷懶的辦法,service中拋出的異常定義狀態碼,controller不捕獲保持代碼簡潔,由exceptionHandler統一處理框架
這樣同時也會有問題:less
一、service中的狀態碼最好是HTTP的狀態碼ssh
二、若是須要提供API文檔,須要從service中搜集查看可能的返回碼列表阿里雲
參考資料:
java web service controller 異常_百度搜索
Java應用後臺開發設計之異常封裝(一) - - ITeye博客
java web項目總體異常處理機制 - 上善若水任方圓 - ITeye博客
Java-異常機制詳解以及開發時異常設計的原則要求 - CSDN博客
Java Web 項目(Spring 項目)異常處理問題 - V2EX
java - 關於Service層異常封裝的問題 - SegmentFault 思否
關於Service層異常封裝的問題 - 小茗同窗的回答 - SegmentFault 思否
java web項目總體異常處理機制 - 上善若水任方圓 - ITeye博客
web開發-java異常從業務層集中拋出,是否是每一個控制層方法都要try catch——CSDN問答頻道
java - 到底應該在action裏面捕捉異常仍是在service裏面捕捉異常? - SegmentFault 思否
java - 請問業務層方法是拋出一個異常好仍是返回一個結果更好 - SegmentFault 思否