ウェブプログラムの異常が発生したとき、彼らは非常にきれいな、クライアントに直接「ホワイトレーベルのエラー・ページ」ページを表示する傾向があります。そのため、各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;
}
}
コントローラは、クライアントに表示され、例外をスローする場合
私たちは、コメントで指摘できるという希望の不備が、見ていただきありがとうございます場合は、この論文では、単純に、グローバル春ブーツ例外処理の仕組みを導入しています。