Rumah >Java >javaTutorial >Analisis prinsip pengendalian pengecualian SpringBoot

Analisis prinsip pengendalian pengecualian SpringBoot

WBOY
WBOYke hadapan
2023-05-13 23:28:131282semak imbas

Proses pengendalian pengecualian

Laksanakan kaedah sasaran Sebarang pengecualian semasa menjalankan kaedah sasaran akan ditangkap oleh catch dan menandakan penamatan permintaan semasa.dispatchException

Analisis prinsip pengendalian pengecualian SpringBoot

Masukkan proses penghuraian paparan dan render halaman Apabila pengecualian berlaku, parameter

kosong dan pengecualian yang ditangkap mvdispatchException

Analisis prinsip pengendalian pengecualian SpringBoot diluluskan dalam Kendalikan pengecualian yang berlaku dalam

, dan kembalikan

handlerModelAndView

Analisis prinsip pengendalian pengecualian SpringBoot (1) Lintas semua

dan cari penghurai yang boleh mengendalikan pengecualian semasa untuk menghuraikan pengecualian

HandlerExceptionResolvers

Analisis prinsip pengendalian pengecualian SpringBoot (2) Panggil

untuk menghuraikan pengecualian, masukkan

dan resolveException. objek, kaedah mana, pengecualian berlaku, dan kemudian sesuaikan pengendalian pengecualian untuk mengembalikan requestresponseModelAndView

Analisis prinsip pengendalian pengecualian SpringBoot (3) Penghurai pengecualian lalai sistem

Analisis prinsip pengendalian pengecualian SpringBoot

Kendalikan pengecualian dahulu, Simpan maklumat pengecualian ke medan

dan kembalikan DefaultErrorAttributesrequestnull

Analisis prinsip pengendalian pengecualian SpringBoot

ialah digunakan untuk mengendalikan pengecualian kaedah yang ditandai dengan

anotasi ExceptionHandlerExceptionResolver@ExceptionHandler

Digunakan untuk mengendalikan pengecualian kaedah yang ditandai dengan

anotasi ResponseStatusExceptionResolver@ResponseStatus

Penghurai pengecualian pemproses lalai, mengendalikan beberapa perkara biasa pengecualian

DefaultHandlerExceptionResolver (4) Jika Jika tiada penghurai boleh mengendalikan pengecualian, pengecualian akan dilemparkan

Analisis prinsip pengendalian pengecualian SpringBoot (5) Jika tiada penghurai yang boleh mengendalikan pengecualian semasa , permintaan

akhirnya akan dihantar, Majukan maklumat pengecualian yang disimpan ke

. /error digunakan khas untuk mengendalikan /error permintaan BasicErrorController akan merentasi semua /error paparan ralat penghuraian Jika tiada penghurai paparan ralat tersuai, BasicErrorController lalai akan digunakan dan kod respons akan dirawat. sebagai ralat. Alamat halaman yang akhirnya dijawab oleh enjin templat. ErrorViewResolverDefaultErrorViewResolverBeberapa kaedah dan prinsip pengendalian pengecualian

1. Jika terdapat halaman kod status ralat yang tepat, ia akan dipadankan dengan tepat Jika tiada halaman, cari

Jika tiada, cetuskan halaman putih

error/404.html 2. Gunakan error/5xx.html dan. 4xx.html untuk mengendalikan pengecualian global Lapisan bawah adalah

Disokong

@ControllerAdvice@ExceptionHandlerExceptionHandlerExceptionResolver

3. Gunakan

dan pengecualian tersuai. Lapisan bawah ialah Analisis prinsip pengendalian pengecualian SpringBoot Jika lapisan bawah memanggil

, Tomcat akan menerima

. Pada akhir permintaan, @ResponseStatus kosong ResponseStatusExceptionResolver dikembalikan, supaya tiada penghurai pemprosesan boleh mengendalikan pengecualian semasa, dan akhirnya akan menghantar permintaan response.sendError(statusCode, resolvedReason) digunakan khas untuk mengendalikan error meminta dan menyesuaikan diri dengan new Atau ModelAndView halaman /errorBasicErrorController/error4xx.html5xx.html

4. Pengecualian asas musim bunga, seperti pengecualian penukaran jenis parameter. Lapisan bawah ialah

untuk mengendalikan pengecualian di bahagian bawah rangka kerja Lapisan bawah juga Analisis prinsip pengendalian pengecualian SpringBoot, dan Tomcat akan menerima
. Pada akhir permintaan,

kosong

dikembalikan, supaya tiada penghurai pemprosesan boleh mengendalikan pengecualian semasa, dan akhirnya akan menghantar permintaan DefaultHandlerExceptionResolver digunakan khas untuk mengendalikan response.sendError(HttpServletResponse.SC_NOT_ACCEPTABLE) meminta dan menyesuaikan diri dengan error Atau newhalamanModelAndView

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. Pelaksanaan tersuai HandlerExceptionResolver mengendalikan pengecualian, yang boleh digunakan sebagai peraturan pengendalian pengecualian global lalai

@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();
    }
}

Analisis prinsip pengendalian pengecualian SpringBoot

ErrorViewResolver untuk melaksanakan pengendalian pengecualian tersuai.

(1) Apabila lapisan bawah memanggil response.sendError, permintaan error akan dipindahkan ke basicErrorController secara lalai dan BasicErrorController digunakan khas untuk mengendalikan permintaan /error dan menyesuaikan diri dengan halaman 4xx.html atau 5xx.html

(2) Jika tiada penghurai boleh mengendalikan pengecualian, lapisan bawah kucing jantan juga akan memanggil response.sendError. Permintaan error akan dimajukan ke basicErrorController secara lalai dan BasicErrorController digunakan khas untuk mengendalikan permintaan /error dan menyesuaikan diri dengan halaman 4xx.html atau 5xx.html.

(3) basicErrorController Alamat halaman yang anda ingin pergi ditentukan oleh ErrorViewResolver penghurai paparan ralat, iaitu, ia menyesuaikan diri dengan halaman 4xx.html atau 5xx.html.

Atas ialah kandungan terperinci Analisis prinsip pengendalian pengecualian SpringBoot. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam