当前位置: 首页 > 后端技术 > Java

二、SpringBoot异常处理步骤流程

时间:2023-04-02 09:31:57 Java

异常处理步骤流程设置异常:步骤:1.执行目标方法。如果目标方法执行成功,将返回ModelAndView,但目标方法执行过程中的任何异常都会被捕获,并将当前请求标记为End;并用dispatchException封装异常2,进入视图分析流程(页面渲染?)processDispatchResult(processedRequest,response,mappedHandler,mv,dispatchException);如果target方法执行正确,mv是有值的,但是上面的target方法有异常,所以mv为空,dispatchException是算术异常3.mv=processHandlerException;处理handler中发生的异常,处理后返回ModelAndView;1、遍历所有的handlerExceptionResolvers,看谁能处理当前的异常[HandlerExceptionResolver处理器异常解析器]处理完异常后,最后如果结果不为空,返回ModelAndView2,系统默认的异常解析器;1.DefaultErrorAttributes优先处理异常。将异常信息保存到rrequest域,返回null;相当于调用这个方法。这个接口规定如果自定义一个异常解析器,刚才是哪个目标方法发生了异常,然后就可以在这个方法内部自定义异常。如何处理,只需要返回一个ModelAndView。所以最后就算自定义了异常解析器,也得返回一个ModelAndView给我,让spring底层知道异常处理完后跳转到哪个页面,页面放什么数据.遍历默认的异常解析器后,发现无法处理,所以会抛出异常2。默认情况下,没有人能处理异常,所以会抛出异常1。如果没有人能处理最后的底层层,将发送/error询问。它将由底层的BasicErrorController进行处理■2.解析错误视图;遍历所有的ErrorViewResolvers,看谁能解决。■3.默认的DefaultErrorViewResolver,将响应状态码作为错误页面的地址,拼接成error/500.html■4.模板引擎最终响应这个页面error/500.html总结:如果一个异常发生,会调用系统默认的异常解析器解析。如果系统默认的异常解析器无法解析,底层会发送/error请求,转发给BasicErrorController处理。BasicErrorController调用底层的ErrorViewResolver进行处理。(也可以自定义ErrorViewResolver来决定如何处理。)主要涉及两个环节:(1)会调用系统默认的异常解析器来解析,系统默认的异常解析器是否可以解析。(2)DefaultErrorAttributes总是返回空,也就是说它只保存一条错误信息。保存错误信息的意义其实是为了下次。如果下次没有人能处理好,就会发送一个/error请求,我们从获取请求字段中的最后一条错误信息开始,相当于数学上的算术异常。所有的异常解析器都无法处理,最后调用底层默认的异常错误处理机制DefaultErrorAttributes,最后得到一个错误页面。执行目标方法,方法执行过程中出现异常,然后处理异常,遍历所有的异常解析器,看哪些可以解析,哪些可以使用。如果有异常解析器可以解析,则调用异常解析器的解析异常方法进行解析。解析后返回modelAndView。如果异常解析器无法解析,就会发送/error请求,转交给BasicErrorController进行处理,BasicErrorController调用底层的ErrorViewResolver进行处理。