2017-08-25 19 views
1

私はSpringブートWebアプリケーションを作成していますが、より明快で明示的なエラーページレジストラがあると、なぜグローバル例外ハンドラ(@ControllerAdvice)を使用するのか混乱します。誰かがもっと説明でき、グローバル例外ハンドラクラス(@Exceptionhandlerメソッドを持つ@ControllerAdviceでクラスが宣言されているクラス)からエラーページレジストラを呼び出すことができますか?エラーページレジストラとグローバル例外処理

答えて

2

ブライアンの答えとして、私はあなたがこれを行うことができると思います。 https://github.com/kennytai/SampleSpringbootExceptionHandler このサンプルでは、​​TestControllerからすべての例外を管理するために、GlobalExceptionHandlerクラスの@ControllerAdviceを使用します。このサンプルでは、​​このサンプルをここで証明します。

このヘルプが必要です。

+0

それは非常に有用です...私はまだそれを越えていますが、私の質問はどちらも自分自身の方法で役に立ちます。 GlobalExceptionHandlerからExceptionPageRegistrarを呼び出す –

+0

私はそれが可能だと思います。任意のExceptionをThrowすることができ、GlobalExceptionHandlerはそれを取得してメッセージ、応答コードなどを処理します。 –

1

実際には反対です。error pages mechanism in Spring Bootはグローバルです。アプリケーションによって処理されないすべての例外をキャッチしています。サーブレット環境では、要求を/errorパスのコンテナに戻して送信することにも注意してください。

あなたはそうですが、このメカニズムは本当に強力で、多くのことを達成することができます。

あなたが言及している他の例外処理メカニズムは、Spring MVC自身によって提供されています。これらはリクエストの処理中に実行され、コンテナへの追加のディスパッチを必要としません。場合によっては、ErrorController(これはMVCコントローラ)よりも少ない機能しか提供しないため、より限定的な場合もあります。 しかし、エラーページとは異なり、あなたが集中し、それらを設定することができ、特定のエラー:あなたは

  • あなたが設定することができますを処理したいコントローラー内@ExceptionHandlerを宣言し、例外の種類を指定することができ

    • @ControllerAdvice注釈は唯一のコントローラが特定のインターフェイスを拡張したり、特定のアノテーション

    私はあなたがコントローラレベルでのビジネス例外に対処したい場合、後者は非常に便利ですと言うだろうと注釈を付け、特定のパッケージに適用します。エラーページでこれを行うことはできますが、あまりにも多くのものを扱う単一のエラーコントローラで終わる可能性があります。

  • +0

    ありがとう。私の質問は両方とも自分自身の方法で役に立つので、私はExceptionPageRegistrarをGlobalExceptionHandlerから呼び出すことができます –