ホームページ > Java > &#&チュートリアル > SpringBoot 例外処理の原理の分析

SpringBoot 例外処理の原理の分析

WBOY
リリース: 2023-05-13 23:28:13
転載
1276 人が閲覧しました

例外処理プロセス

ターゲット メソッドを実行します。ターゲット メソッドの実行中の例外はすべて、catch によってキャッチされ、現在のリクエストの終了がマークされます。 は例外をスローします

SpringBoot 例外処理の原理の分析

ビュー解析プロセスに入り、ページをレンダリングします。例外が発生すると、パラメータ

mv は空になり、キャプチャされた例外 dispatchException## が渡されます。

SpringBoot 例外処理の原理の分析

#handler

で発生した例外を処理し、ModelAndView を返します。

SpringBoot 例外処理の原理の分析(1) すべての

HandlerExceptionResolvers

を調べて、現在の例外を処理できるパーサーを見つけて例外を解決します

SpringBoot 例外処理の原理の分析(2)

solveException

を呼び出して例外を解決し、request オブジェクトと response オブジェクト、どのメソッドで例外が発生したかを渡します。 ModelAndView

SpringBoot 例外処理の原理の分析(3) システムのデフォルトの例外パーサー

SpringBoot 例外処理の原理の分析 を返すように例外処理をカスタマイズします。 ①

DefaultErrorAttributes

最初に例外を処理し、情報は request フィールドに保存され、null

# が返されます。 ② SpringBoot 例外処理の原理の分析ExceptionHandlerExceptionResolver

はアノテーションの処理に使用されます

@ExceptionHandlerアノテーション付きメソッド例外ResponseStatusExceptionResolver

@ResponseStatus アノテーション付きメソッド例外の処理に使用されますDefaultHandlerExceptionResolver

デフォルトのプロセッサ例外パーサー、いくつかの一般的な例外を処理します

(4) 例外を処理できるパーサーがない場合、例外がスローされます

(5) 現在の例外を処理できるパーサーがない場合、最終的に SpringBoot 例外処理の原理の分析/error

リクエストが送信され、保存された例外情報が

/ に転送されます。エラー###。 BasicErrorController は、/error リクエストを処理するために特別に使用されます。BasicErrorController は、すべての ErrorViewResolver を走査してエラー ビューを解析します。カスタム エラーがない場合ビューの解析 デフォルトの DefaultErrorViewResolver が使用され、応答コードがエラー ページのアドレスとして使用され、テンプレート エンジンは最終的にこのページに応答します。 いくつかの例外処理方法と原則1. エラー ページ

error/404.html

error/5xx.html

をカスタマイズします。正確なエラー ステータス コード ページがある場合は、正確に照合されます。ページがない場合は、4xx.html を探します。ページがない場合は、白いページがトリガーされます。 2. @ControllerAdvice

@ExceptionHandler

を使用してグローバル例外を処理し、最下層は ExceptionHandlerExceptionResolver # によってサポートされます。 #3.

@ResponseStatus

と自己定義の例外を使用します。最下層は SpringBoot 例外処理の原理の分析ResponseStatusExceptionResolver

で、最下層は

response.sendError(statusCode,solvedReason) を呼び出し、Tomcat は error を受け取ります。リクエストの最後に空の ModelAndView が返されるため、処理パーサーは現在の例外を処理できず、最終的に /error リクエストが送信されます ( BasicErrorController)。 は、/error リクエストを処理し、4xx.html または 5xx.html ページ # に適応するために特別に使用されます。 ##4. Spring の基礎となる例外 (パラメーター型変換例外など)。最下層は、フレームワークの最下部で例外を処理する DefaultHandlerExceptionResolver です。最下層は

response.sendError(HttpServletResponse.SC_NOT_ACCEPTABLE)

です。Tomcat は SpringBoot 例外処理の原理の分析error# を受け取ります##。リクエストの最後に空の
ModelAndView

が返されるため、処理パーサーは現在の例外を処理できず、最終的に

/error リクエストが送信されます ( BasicErrorController)。 は、/error リクエストを処理するために特別に使用され、4xx.html または 5xx.html page に適応します。

protected ModelAndView doResolveException(
			HttpServletRequest request, HttpServletResponse response, @Nullable Object handler, Exception ex) {

		try {
			if (ex instanceof HttpRequestMethodNotSupportedException) {
				return handleHttpRequestMethodNotSupported(
						(HttpRequestMethodNotSupportedException) ex, request, response, handler);
			}
			else if (ex instanceof HttpMediaTypeNotSupportedException) {
				return handleHttpMediaTypeNotSupported(
						(HttpMediaTypeNotSupportedException) ex, request, response, handler);
			}
			else if (ex instanceof HttpMediaTypeNotAcceptableException) {
				return handleHttpMediaTypeNotAcceptable(
						(HttpMediaTypeNotAcceptableException) ex, request, response, handler);
			}
			else if (ex instanceof MissingPathVariableException) {
				return handleMissingPathVariable(
						(MissingPathVariableException) ex, request, response, handler);
			}
			else if (ex instanceof MissingServletRequestParameterException) {
				return handleMissingServletRequestParameter(
						(MissingServletRequestParameterException) ex, request, response, handler);
			}
			else if (ex instanceof ServletRequestBindingException) {
				return handleServletRequestBindingException(
						(ServletRequestBindingException) ex, request, response, handler);
			}
			else if (ex instanceof ConversionNotSupportedException) {
				return handleConversionNotSupported(
						(ConversionNotSupportedException) ex, request, response, handler);
			}
			else if (ex instanceof TypeMismatchException) {
				return handleTypeMismatch(
						(TypeMismatchException) ex, request, response, handler);
			}
			else if (ex instanceof HttpMessageNotReadableException) {
				return handleHttpMessageNotReadable(
						(HttpMessageNotReadableException) ex, request, response, handler);
			}
			else if (ex instanceof HttpMessageNotWritableException) {
				return handleHttpMessageNotWritable(
						(HttpMessageNotWritableException) ex, request, response, handler);
			}
			else if (ex instanceof MethodArgumentNotValidException) {
				return handleMethodArgumentNotValidException(
						(MethodArgumentNotValidException) ex, request, response, handler);
			}
			else if (ex instanceof MissingServletRequestPartException) {
				return handleMissingServletRequestPartException(
						(MissingServletRequestPartException) ex, request, response, handler);
			}
			else if (ex instanceof BindException) {
				return handleBindException((BindException) ex, request, response, handler);
			}
			else if (ex instanceof NoHandlerFoundException) {
				return handleNoHandlerFoundException(
						(NoHandlerFoundException) ex, request, response, handler);
			}
			else if (ex instanceof AsyncRequestTimeoutException) {
				return handleAsyncRequestTimeoutException(
						(AsyncRequestTimeoutException) ex, request, response, handler);
			}
		}
		catch (Exception handlerEx) {
			if (logger.isWarnEnabled()) {
				logger.warn("Failure while trying to resolve exception [" + ex.getClass().getName() + "]", handlerEx);
			}
		}
		return null;
	}
ログイン後にコピー

5.自訂實作 HandlerExceptionResolver 處理異常,可以作為預設的全域異常處理規則

@Order(value = Ordered.HIGHEST_PRECEDENCE)
@Component
public class CustomerHandlerExceptionResolver implements HandlerExceptionResolver {
    @Override
    public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {

        try {
            response.sendError(521,"I love you !");
        } catch (IOException e) {
            e.printStackTrace();
        }
        return new ModelAndView();
    }
}
ログイン後にコピー

SpringBoot 例外処理の原理の分析

ErrorViewResolver實作自訂處理異常。

(1)底層呼叫response.sendError時,error要求就會預設轉給basicErrorControllerBasicErrorController專門處理/error請求,適配器4xx.html5xx.html頁面

(2)如果異常沒有任何解析器能處理,tomcat底層也會呼叫response.sendErrorerror請求就會預設轉給basicErrorControllerBasicErrorController專門處理/error請求,適配4xx.html5xx.html頁。

(3)basicErrorController 要去的頁面位址是由 ErrorViewResolver這個錯誤視圖解析器決定的,也就是適應4xx.html5xx.html頁。

以上がSpringBoot 例外処理の原理の分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:yisu.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート