首頁 > Java > java教程 > 主體

Spring 中的異常:如何克服錯誤

DDD
發布: 2024-11-03 09:41:30
原創
243 人瀏覽過

因此,您將 Spring 實現到您的專案中,然後,根據墨菲定律,出現了異常。但不要驚慌——Spring 具有強大的錯誤處理能力!讓我們弄清楚如何使用這些功能。

已檢查和未檢查的異常:為什麼一切都如此混亂?

Исключения в Spring: как приручить свои ошибки

Java將異常分為兩種:受控異常和非受控異常。受檢查的異常需要明確處理。想像一下兩個人行橫道,人們正在穿過它們。一個過境點由一名嚴格檢查員把守,並掛著「嚴格控制」標誌。這裡每個人都會被檢查,沒有權限的就不允許通過。這種轉換類似於檢查異常:它們需要強制處理,否則程式將無法編譯。

相反,第二個轉換不受控制。人們自由快速地通過它,沒有任何檢查。這類似於未經檢查的異常:此類異常不需要處理,即使沒有錯誤檢查,程式碼也可以運行。然而,如果出現錯誤,它會意外地出現——就在「道路」上。

public void someMethod() throws IOException { 
    throw new IOException("Oops, checked exception!");
}

登入後複製
登入後複製
登入後複製

@ExceptionHandler:當 bug 得到 VIP 處理時

@ExceptionHandler 是您自己的個人“保鑣”,僅捕獲和處理指定方法或類別的例外。如果您想對某些錯誤給予 VIP 處理,請使用 @ExceptionHandler 註解該方法並享受。

public void someMethod() throws IOException { 
    throw new IOException("Oops, checked exception!");
}

登入後複製
登入後複製
登入後複製

現在,每當遇到 ResourceNotFoundException 時,您的處理程序都會悄悄地列印一條友善的訊息,而不是使用者看到可怕的錯誤堆疊。

@ControllerAdvice:何時向左和向右提供建議

如果@ExceptionHandler只適用於特定的類,那麼@ControllerAdvice就是排隊之王。該註解覆蓋了所有控制器,因此 bug 不會再次被漏掉!

Исключения в Spring: как приручить свои ошибки

    @ExceptionHandler(ResourceNotFoundException.class)
    public ResponseEntity<String> handleResourceNotFound(ResourceNotFoundException ex) {
        return new ResponseEntity<>("Resource not found: " + ex.getMessage(), HttpStatus.NOT_FOUND);
    }

登入後複製
登入後複製

使用此程式碼,所有未捕獲的錯誤都將被捕獲並透過一條訊息進行處理。這就像一個針對例外情況的「全包」設定 - 方便且安全。

@ResponseStatus:當你想讓異常更具表現力時

有時標準 HTTP 狀態並不能完全捕捉異常的本質。但使用@ResponseStatus,您可以強制異常更具表現力。

Исключения в Spring: как приручить свои ошибки

@ControllerAdvice
public class GlobalExceptionHandler {

    @ExceptionHandler(Exception.class)
    public ResponseEntity<String> handleGlobalException(Exception ex) {
        return new ResponseEntity<>("Oops, something went wrong!", HttpStatus.INTERNAL_SERVER_ERROR);
    }
}
登入後複製

現在,當拋出 ResourceNotFoundException 時,Spring 將自動返回 404 狀態,而無需強制您手動執行。添加戲劇性的好方法,不是嗎?

@RestControllerAdvice:針對 REST 愛好者

@RestControllerAdvice 類似於 @ControllerAdvice,但專門用於 REST 控制器。也就是說,它是您創建 API 的最佳選擇,因為它會傳回 JSON 而不是 HTML 頁面。支持真正的 REST 粉絲!

Исключения в Spring: как приручить свои ошибки

public void someMethod() throws IOException { 
    throw new IOException("Oops, checked exception!");
}

登入後複製
登入後複製
登入後複製

這種方法可確保您的使用者始終收到 JSON 格式的結構化回應,使您的 API 更加使用者友好。

自訂例外:當標準例外不夠時

Исключения в Spring: как приручить свои ошибки

在某些時候,您意識到標準 Exception 和 RuntimeException 根本無法表達您所處情況的全部悲劇。好吧,創建你自己的例外!自訂異常增添了一點個性,Spring 仍然尊重地處理它們。

    @ExceptionHandler(ResourceNotFoundException.class)
    public ResponseEntity<String> handleResourceNotFound(ResourceNotFoundException ex) {
        return new ResponseEntity<>("Resource not found: " + ex.getMessage(), HttpStatus.NOT_FOUND);
    }

登入後複製
登入後複製

為其創建一個處理程序,應用程式的用戶將看到一條清晰的訊息,而不是一堆可怕的行。

結論
Spring 中的錯誤處理是一門藝術。從方法級處理到全域處理,從 JSON 回應到自訂狀態,可能性確實是巨大的。

所以抓住@ExceptionHandler、@ControllerAdvice和@ResponseStatus,並將例外狀況變成錯誤管理中的大師類別。 Spring 已準備好幫助您處理任何錯誤並在用戶面前取回面子

以上是Spring 中的異常:如何克服錯誤的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:dev.to
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板