SpringMVCの例外を処理するための3つの方法

  1. exceptionHandlerのコメント@使用します

  2. HandlerExceptionResolverインタフェースを実現

  3. @controlleradviceのコメントを使用します

1.  使用 @ exceptionHandlerのコメント

ノートには悪いことを使用するための場所を持っている:例外処理とメソッドの方法は同じエラーでなければなりません内部のコントローラ、あなたが見ることができ、このアプローチの最大の欠点は、異常なグローバル・コントロールではありません。各クラスには、再び書き込む必要があります。

@Controller 

パブリッククラスUserControllerで{ 
    / ** 

     * NullPointerExceptionがシミュレート

     * @return 

     * / 

    @RequestMapping( "/ show1")

    パブリック文字列SHOWINFO(){ 

        文字列STR = NULL; 

        str.length(); 

        戻り"インデックス"; 

    } 
    / * * 

     *はArithmeticExceptionのシミュレーション

     * @return 

     * / 

    @RequestMapping( "/ Show2")

    パブリック文字列showInfo2(){ 

        int型A = 10/0; 

        リターン"インデックス"; 

    } 

    / ** 

     * java.lang.ArithmeticException 

     *このメソッドは戻るために必要ModelAndView:目的は、私たちがパッケージの例外情報とビューを指定できるようにすることです

     *パラメータ例外e:異常なオブジェクトは、プロセス内に注入される

     * / 

    @ExceptionHandler(java.lang.ArithmeticException.class値= {})

    公衆のModelAndView arithmeticExceptionHandler(例外E){ 

        のModelAndView音楽のビデオ新しい新規のModelAndView =(); 

        mv.addObject ( "エラー"、e.toString()); 

        mv.setViewName( "ERROR1"); 

        ミュージックビデオを返す; 

    } 

    / ** 

     *のjava.lang.NullPointerException 

     *このメソッドはのModelAndViewを返す必要がある:オブジェクトパッケージは、私たちに異常情報を可能にそして必要に応じて

     図指定

     *パラメータ例外e:異常なオブジェクトは、プロセス内に注入される

     * / 

    @ExceptionHandler(java.lang.NullPointerException.class値= {})

    公衆のModelAndView nullPointerExceptionHandler(例外E){

        ModelAndViewのMV =新しいのModelAndView(); 

        mv.addObject( "エラー"、e.toString()); 

        mv.setViewName( "ERROR2"); 

        MVを返します。

    } 

}

  

2.  使用@controlleradviceコメント+ @ exceptionHandlerの

@上記exceptionHandlerの方法は、内部に同じ方法コントローラ内のエラーでなければならない例外処理の必要性が来ます。コードは@ControllerAdviceを追加したときに、あなたは、同じコントローラである必要はありません。また、新しい機能3.2春をもたらします。コントローラの名前から分かるように、実質的に強化されたことを意味します。つまり、@ controlleradvice + @ exceptionHandlerのは、グローバルな例外のキャッチを達成することができます。

このクラスWebExceptionHandleをスキャンし、血管春にロードすることを確認します

@ControllerAdvice 

パブリッククラスGlobalException { 

    / ** 

     * java.lang.ArithmeticException 

     このメソッドは、のModelAndViewを返す必要*:オブジェクトパッケージは、私たちは情報指定した例外を表示することができます

     *パラメータ例外e:異常なオブジェクトは、プロセスの中に注入されます

     * / 

    @ExceptionHandler(java.lang.ArithmeticException.class値= {})

    公衆のModelAndView arithmeticExceptionHandler(例外E){ 

        のModelAndView音楽のビデオ新しい新規のModelAndView =(); 

        mv.addObject( "エラー"、e.toString()+「 -アドバイス「); 

        mv.setViewName(」ERROR1「); 

        ;ミュージックビデオを返す

    } 

    / ** 

     *のjava.lang.NullPointerException 

     *このメソッドはのModelAndViewを返す必要がある:オブジェクトパッケージは、私たちに異常情報を可能にし、必要に応じて

     図は、指定

     *パラメータ例外e:異常なオブジェクトは、プロセス内に注入される

     * / 

    @ExceptionHandler(java.lang.NullPointerException.class値= {})

    公衆のModelAndView nullPointerExceptionHandler(例外E){ 

        のModelAndView音楽のビデオ新しい新規のModelAndView =(); 

        mv.addObject ( "エラー"、e.toString()+ " -アドバイス"); 

        mv.setViewName( "誤差2"); 

        ;ミュージックビデオを返します

    } 

}

 例外の種類を述べていない@ExceptionHandler注釈を処理する場合、デフォルトの例外型パラメータリストまた、このように書くことができます。

@ControllerAdvice 
パブリック
クラスGlobalExceptionHandler { @ExceptionHandler() @ResponseBody 文字列handleException(例外e){ リターン "!例外ディール" + e.getMessage(); } }

 コントローラのみビジネス処理コード

@Controller 

パブリッククラスUserControllerで{ 
    / ** 

     *模拟にNullPointerException 

     * @return 

     * / 

    @RequestMapping( "/ show1")

    パブリック文字列SHOWINFO(){ 

        文字列str = NULL; 

        str.length(); 

        「インデックス」を返します。

    } 
    / ** 

     *模拟はArithmeticException 

     * @return 

     * / 

    @RequestMapping( "/ show2")

    パブリック文字列showInfo2(){ 

        int型A = 10/0。

        「インデックス」を返します。

    } 

}

3. 達成 HandlerExceptionResolverインタフェース 

プロジェクト例外は、通常の状況下では、プロジェクトが間違っている時に前方のエラーページの準備をする必要があり、ユーザに表示されるページを統一されたプロセスが必要となります。

@Component //注意该类需要交给スプリング容器管理
パブリッククラスMyExceptionResolverが実装HandlerExceptionResolver { 

  @Override 
  公共のModelAndView resolveException(HttpServletRequestのREQ、HttpServletResponseのRESP、オブジェクトobj、例外例){ 
    System.out.printlnは(ex.getMessage()) ; 
    ModelAndViewのMV =新しいのModelAndView(); 
    mv.setViewName( "/ error.jsp"); 
    MVを返します。
  } 
}

  

 

おすすめ

転載: www.cnblogs.com/kise-ryota/p/11266497.html