-
exceptionHandlerのコメント@使用します
-
HandlerExceptionResolverインタフェースを実現
-
@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を返します。
}
}