Rumah >Java >javaTutorial >Analisis prinsip pengendalian pengecualian SpringBoot
Laksanakan kaedah sasaran Sebarang pengecualian semasa menjalankan kaedah sasaran akan ditangkap oleh catch
dan menandakan penamatan permintaan semasa.dispatchException
kosong dan pengecualian yang ditangkap mv
dispatchException
diluluskan dalam Kendalikan pengecualian yang berlaku dalam
, dan kembalikanhandler
ModelAndView
(1) Lintas semua
dan cari penghurai yang boleh mengendalikan pengecualian semasa untuk menghuraikan pengecualianHandlerExceptionResolvers
(2) Panggil
untuk menghuraikan pengecualian, masukkan dan resolveException
. objek, kaedah mana, pengecualian berlaku, dan kemudian sesuaikan pengendalian pengecualian untuk mengembalikan request
response
ModelAndView
(3) Penghurai pengecualian lalai sistem
①
Kendalikan pengecualian dahulu, Simpan maklumat pengecualian ke medan dan kembalikan DefaultErrorAttributes
request
null
②
ialah digunakan untuk mengendalikan pengecualian kaedah yang ditandai dengan anotasi ExceptionHandlerExceptionResolver
@ExceptionHandler
③
anotasi ResponseStatusExceptionResolver
@ResponseStatus
④
DefaultHandlerExceptionResolver
(4) Jika Jika tiada penghurai boleh mengendalikan pengecualian, pengecualian akan dilemparkan
(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. ErrorViewResolver
DefaultErrorViewResolver
Beberapa kaedah dan prinsip pengendalian pengecualian
error/404.html
2. Gunakan error/5xx.html
dan. 4xx.html
untuk mengendalikan pengecualian global Lapisan bawah adalah
@ControllerAdvice
@ExceptionHandler
ExceptionHandlerExceptionResolver
dan pengecualian tersuai. Lapisan bawah ialah 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 /error
BasicErrorController
/error
4xx.html
5xx.html
untuk mengendalikan pengecualian di bahagian bawah rangka kerja Lapisan bawah juga , dan Tomcat akan menerima
. Pada akhir permintaan,
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 new
halamanModelAndView
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(); } }
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!