似乎有點過分,可以爲300個例外創建300個錯誤。我所做的是創建我們自己的HttpErrorException
類,其中包含我們想要返回的HTTP錯誤。建議開發人員在遇到異常或錯誤時拋出其中一個。如果冒出的例外不是新的HttpErrorExceptions
之一,則返回500。我們沒有將其他異常轉換爲HTTP錯誤,因爲我認爲假定每個特定異常事件總是映射回特定的HTTP錯誤是錯誤的。原因是因爲有很多依賴關係(我們正在使用的其他庫),他們可能會拋出任何類型的異常,對於任何特定的情況,可能無法很好地映射到我們想到的HTTP錯誤。所以我寧願明確。
下面是一個典型用法的扼殺例子。
Account getAccount(String id){
Account a = null;
try{
a = accountRepo.findById(id);
catch(Exception e) {
String error = "Got exception while trying to get Account from db.";
logger.(error, e);
throw new HttpErrorException(500, error);
//or throw new HttpErrorException(HttpStatus.INTERNAL_SERVER_ERROR, error);
}
throw404IfNull(a);
return a;
}
的throwIf404IfNull
就是我們創建,以減少我們的代碼if
語句的簡單方法。我們有幾種這樣的方法,我們的代碼保留了if
語句,否則它們會被單元測試。
void throw404IfNull(Object obj){
if(obj == null) {
throw new HttpErrorException(400, "Object was not found");
}
}
我們使用Spring的異常處理功能,所有HttpErrorException
的映射到同是在異常的錯誤狀態很好很好格式化的HTTP錯誤。
1. **否**。 2.通過以對開發人員恢復有意義的方式對錯誤進行分類。堆棧跟蹤會告訴你發生異常的位置,所以你不知道爲什麼要創建300個自定義異常。 –
確實沒有必要創建如此多的自定義異常。您可能會發現現有的異常類將足以使用,而不是您創建的許多異常。然後,您可以通過向每個異常的構造函數傳遞不同的消息和原因來使這些更具體。 https://www.cs.cmu.edu/~pattis/15-1XX/15-200/lectures/exceptions/lecture.html https://docs.oracle.com/javase/7/docs/api/java/郎/ Exception.html –