春ブーツ道路プライマー(9)---グローバル例外ハンドラプログラム

免責事項:この記事はブロガーオリジナル記事です、続くBY-SAのCC 4.0を著作権契約、複製、元のソースのリンクと、この文を添付してください。
このリンク: https://blog.csdn.net/Geffin/article/details/100170833

ウェブプログラムの異常が発生したとき、彼らは非常にきれいな、クライアントに直接「ホワイトレーベルのエラー・ページ」ページを表示する傾向があります。そのため、各Webアプリケーションは、クライアントが統一されたグローバルな例外ハンドラプログラムを通じて迅速でフレンドリーな受信できることを確認する必要があります。

1つの春ブートデフォルトの例外処理メカニズム

ブラウザクライアントが存在しないページを要求したり、例外を処理するサーバーが発生すると、春ブーツは「ホワイトレーベルのエラーページ」と呼ばれる、文書のデフォルトのHTMLコンテンツに応答します。

コントローラを書いてみましょう、それは意図的なエラーが発生します

@Controller
public class IndexController {

	@RequestMapping("index")
    public String index(){
		int i = 1/0;
        return "index" ;
	}
}

その後、我々は、ブラウザを開き、次のようにページを見つけます:
ここに画像を挿入説明

2 @ControllerAdviceによって例外のアノテーションを処理するために、

私たちは、指定された例外を達成するために、注釈やメモ@ExceptionHandler特別な治療を@ControllerAdvice使用することができます。私たちは地元の例外処理が必要な場合は、グローバルな例外ハンドラが必要な場合は、あなたが@ControllerAdvice + @ExceptionHandlerを使用する必要がありますすることができ@Controller + @ExceptionHandlerを使用しています。

ローカル例外処理

ローカル例外処理は、クラスのメソッドに@ExceptionHandlerコメントを必要と例外がこの注釈で定義されている場合、このメソッドが実行されますが、スローされます。@ExceptionHandler @Controller、この方法でのみ、このカテゴリで働くところクラスがある場合。クラスは@ControllerAdvice @ExceptionHandlerノートに常駐している場合、このメソッドは、グローバルに行動します。

例えば、我々は@ExceptionHandlerを使用して例外をキャッチするために、コントローラは、上記を使用して変更する必要がありました

@Controller
public class IndexController {

	@RequestMapping("index")
    public String index(){
		int i = 1/0;
        return "index" ;
	}
	
	@ExceptionHandler(Exception.class) 
    @ResponseBody 
    public String exHandler(Exception e){ 
      if(e instanceof ArithmeticException){ 
          return "/ by zero"; 
      } 
      return "others"; 
    }
}

その後、我々は、ブラウザを再度開き、
ここに画像を挿入説明
例外が@ExceptionHandlerを処理されたことが判明し、クライアントにエラーメッセージを出力します。

グローバル例外ハンドラ

@ControllerAdvice春3.2に注釈を追加します。

我々は唯一の@ControllerAdvice処理により、コントローラ層に入りますエラーに注意を払う必要があり、インターセプタスローされたエラーやアクセスエラーが状況はSpringBootのデフォルト例外処理メカニズムによって処理されますアドレス。

私たちは、グローバルな例外ハンドラクラスを作成します

@ControllerAdvice
public class ExceptionAdvice {

	@ResponseBody
    @ExceptionHandler(value = Exception.class)
    public Map<String,Object> exceptionHandler(Exception ex){
        Map<String,Object> map  = new HashMap<String,Object>();
        map.put("message", ex.getMessage());
        map.put("localizedmessage", ex.getLocalizedMessage());
        map.put("class", ex.getClass());
        map.put("stacktrace", ex.getStackTrace());
        map.put("suppressed", ex.getSuppressed());
        return map;
     }

}

コントローラは、クライアントに表示され、例外をスローする場合
ここに画像を挿入説明

私たちは、コメントで指摘できるという希望の不備が、見ていただきありがとうございます場合は、この論文では、単純に、グローバル春ブーツ例外処理の仕組みを導入しています。

おすすめ

転載: blog.csdn.net/Geffin/article/details/100170833