春@ControllerAdvice使用し、ソースコード解析

春ControllerAdviceはデフォルトノートとして、(プロジェクトパッケージスキャンの範囲内で)例外キャプチャ機能、すべてのコントローラを提供しています。

使用時には、次の通り:

    @Order(Integer.MAX_VALUE)
    @ControllerAdvice
    public class DefaultExceptionHandler {
        protected Logger log = LoggerFactory.getLogger(DefaultExceptionHandler.class);
     
     
        @ExceptionHandler(value = Exception.class)
        @ResponseBody
        public ResponseEntity defaultErrorHandler(Exception e) {
            ...
            return xxx;
        }
     
    }

注釈に基づいてControllerAdvice @まず、そうadviceBeanを宣言した最初のクラスに配置され、機能しています。

そして、書き込みハンドラ、@ exceptionHandlerのadviceBean注釈Exception.classに記載の方法であって、異常な切断を示す帰属方法を識別するため、@ResponseBodyこの注釈は次の場合、メソッドの戻り型JSON形式、任意の注釈を表示するために使用され戻り値は、具体的なクラスメソッドである、あなたは、このコメントは必要ありません。

最後に、ボディ、結果のコンフィギュレーションを例外処理後の方法をトラップする方法。

より一般的な文言を具体的に書かれている私たちが理解し、柔軟な使用を深めるために、春に例外を処理する方法になります次の書き込みに実際のニーズに基づいてすること。

Web開発プロセス、私たちは、すべてのクラスのことを知っていると信じて:DispatcherServletの、そして入り口としてそれを使用して例外をキャッチするために私たちの旅を始めました。

1、doDispatch方法を入力するには、この方法は、主に、このプロセスで結果を処理した後、processDispatchResultを入力し、控えめに言って、であり、メインメソッドのDispatcherServletあります

2、processDispatchResult方法を入力し、コールprocessHandlerException

processHandlerException方法は、ポーリングHandlerExceptionResolvers、例外処理を開始へ3、

レゾルバでは、レゾルバは、最終的にExceptionHandlerExceptionResolver、上記resolverExceptionによって第3の方法ステップ、doResolverHandlerMethodExceptionの処理方法ExceptionHandlerExceptionResolverに進むある専用捕捉異常な使用を有します

 まず、getExceptionHandlerMethodは、例外処理を取得します

このプロセスが完了したら、我々は反射法に基づいてコールを定義し、取得し、取得マッチング例外処理方法のため(上記の例で注文、より少数、より優先度)に応じて、定義されたすべてのControllerAdviceを取得しますそして、最終的な結果の結果を得るに戻ります。

注:このステップ、一流クラスのアドバイスは、もはや検索プロセス、方法の直接的なリターンフロントを継続し、試合後に例外処理方法を見つけていません。
----------------
免責事項:この記事は、元の記事のCSDNのブロガーの努力小さな星」で、CC 4.0 BY-SAの著作権契約書に従って、再現し、元のソースのリンクを添付してくださいそしてこの文。
オリジナルリンクします。https://blog.csdn.net/GAOXINXINGgaoxinxing/article/details/91416412

公開された66元の記事 ウォンの賞賛222 ビュー119万+

おすすめ

転載: blog.csdn.net/Liuqz2009/article/details/104474714