2012-05-20 38 views
7

我使用Struts,Spring和Hibernate開發應用程序。在哪裏處理彈簧DataAccessException

我的DAO使用spring jdbc及其所有方法拋出DataAccessException(即未檢查)。

我應該在哪裏處理這些異常?我知道這是一個未經檢查的異常,但我認爲我需要告訴用戶數據庫是否存在問題或它的連接。

我想我應該重新拋出我的服務類方法中的DataAccessException,以便被Controller捕獲。 這是一個很好的做法嗎?

我查看了Spring包中的示例,並未在域或服務區中找到任何異常處理。 DataAccessException似乎在離開dao區域後被忽略。

請爲此提出一個好的設計。

+0

可能的重複[我可以直接在服務層使用spring DataAccessException](http://stackoverflow.com/questions/10672879/can-i-use-spring-dataaccessexception-directly-in-service-layer) – Raedwald

回答

13

DataAccessException在離開dao區域後似乎被忽略。

這是一件好事!讓它飛過整個堆棧。您可能在服務層上有事務 - 異常會透明地導致最外層的事務回滾。大!

現在它會找到它的方式來控制器。如果你在Struts控制器中捕獲它,你可以返回不同的看法。但很可能你不想在每個Struts操作中處理異常。所以讓例外進一步下降。在某些時候,Struts會捕獲該異常並嘗試處理它。 Struts有一些複雜的錯誤處理機制,你會發現很多關於它們的信息。通常它會根據異常類型調用一些自定義操作或錯誤屏幕。

最後,如果連Struts都無法處理異常,它將被重新拋出到容器,導致HTTP 503返回異常細節。

正如你所看到的,你可以控制許多級別的異常,通常情況下越低越好。

+0

這個是一個很好的迴應。 CUDOS! – markthegrea