亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

關于Service層異常封裝的問題

關于Service層異常封裝的問題

冉冉說 2019-04-11 14:15:54
service層應該是拋出自定義異常,還是通用的Exception?比如:前臺需要code、message、datacode:返回特定編碼,比如0表示成功,1表示失敗message:失敗時返回錯誤信息data:如果是查詢,用戶存放數據現在自定義一個異常,CustomizeException,可以拋出code和message。最好的用法是不是應該在dao層拋出Exception,service層catch之后throw出新的自定義異常CustomizeException,給相應異常信息加上描述。controller就直接返回異常中的code和message給前臺。如果有描述不到位的地方,敬請見諒。
查看完整描述

4 回答

?
揚帆大魚

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

我習慣的做法是:

  1. 對于DAO層查詢不到結果的情況,返回NULL。對于連接失敗等內部問題,拋異常

  2. Service層需要檢查NULL,然后返回NotFoundException。連接失敗等異常不管,直接往上拋

  3. 在Controller層面,通過Spring MVC的Controller Advice統一處理異常。根據不同的異常轉成合理的Http status和message返回給客戶端


查看完整回答
反對 回復 2019-04-23
?
月關寶盒

TA貢獻1772條經驗 獲得超5個贊

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

查看完整回答
反對 回復 2019-04-23
?
慕碼人2483693

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

dao層不需要拋出異常,應該在service層拋出異常,可以是自定義的異常,然后在controller中定義exception handler統一處理。


查看完整回答
反對 回復 2019-04-23
?
當年話下

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

我認為最合理的做法:
1、dao層不捕獲異常、不拋出異常:spring框架將底層的數據庫checked異常封裝成unchecked異常了
2、service層捕獲異常,并拋出自定義unchecked異常,異常中不定義狀態碼:checked異常默認情況事務不會回滾
3、controller層捕獲異常,并拋出自定義異常,異常類中定義需要返回的HTTP狀態碼
4、exceptionHandler中統一處理所有異常

但是,這樣會造成controller比較臃腫,
所以,很多項目使用偷懶的辦法,service中拋出的異常定義狀態碼,controller不捕獲保持代碼簡潔,由exceptionHandler統一處理


查看完整回答
反對 回復 2019-04-23
  • 4 回答
  • 0 關注
  • 2042 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號