Spring の例外: エラーを制御する方法

DDD
リリース: 2024-11-03 09:41:30
オリジナル
242 人が閲覧しました

つまり、Spring をプロジェクトに実装すると、マーフィーの法則に従って例外が発生します。ただし、慌てる必要はありません。Spring には強力なエラー処理機能が備わっています。これらの機能をどのように使用できるかを正確に理解してみましょう。

チェック済み例外とチェックなし例外: なぜすべてがこれほど混乱しているのですか?

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

Java は、例外をチェック済みとチェックなしの 2 つのタイプに分類します。チェックされた例外には明示的な処理が必要です。人々が通過する 2 つの横断歩道を想像してください。ある踏切は「厳重規制」の標識を掲げた厳重な検査官によって警備されている。ここでは全員がチェックされ、通行許可がない場合は通過できません。この移行はチェック例外に似ています。チェック例外には必須の処理が必要です。そうでない場合、プログラムはコンパイルされません。

逆に、2 番目の遷移は制御されません。人々は何のチェックも受けずに、自由かつ迅速にそこを通過します。これは未チェックの例外に似ています。このような例外は処理する必要がなく、エラー チェックなしでもコードを実行できます。ただし、エラーが発生した場合は、予期せず「道路」上に表示されます。

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

ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

@ExceptionHandler: バグが VIP 扱いを受ける場合

@ExceptionHandler は、指定されたメソッドまたはクラスのみの例外をキャッチして処理する独自の「バウンサー」です。特定のエラーに VIP 処理を施したい場合は、メソッドに @ExceptionHandler アノテーションを付けて楽しんでください。

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

ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

今後、ResourceNotFoundException が発生するたびに、ユーザーに恐ろしいエラー スタックが表示されるのではなく、ハンドラーは静かにフレンドリーなメッセージを出力します。

@ControllerAdvice: いつ左右にアドバイスを与えるか

@ExceptionHandler が特定のクラスに対してのみ機能する場合、@ControllerAdvice はキューイングの王様です。この注釈はすべてのコントローラーをカバーするため、バグが再び隙間から漏れることはありません!

Исключения в 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 コントローラー専用です。つまり、HTML ページではなく JSON を返すため、API を作成するのに最適な選択肢です。本物の 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 中国語 Web サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート