共计 1400 个字符,预计需要花费 4 分钟才能阅读完成。
自定义谬误页
-
- error/404.html error/5xx.html;有准确的谬误状态码页面就匹配准确,没有就找 4xx.html;如果都没有就触发白页
@ControllerAdvice+@ExceptionHandler 解决全局异样
:底层是 ExceptionHandlerExceptionResolver 反对解决的
-
@ResponseStatus+ 自定义异样
:底层是 ResponseStatusExceptionResolver 反对解决的,把 responsestatus 注解的信息拿来,而后底层调用 response.sendError(statusCode, resolvedReason);这个 sendError 办法相当于间接通知 tomcat 给我发 /error 申请,申请的错误信息是 statusCode,起因是 resolvedReason这个 /error 其实就是映射到‘默认没有任何人能解决异样,如果没有任何人能解决最终底层就会发送 /error 申请。会被底层的 BasicErrorController 解决’这个流程。
Spring 底层的异样,如 参数类型转换异样
:DefaultHandlerExceptionResolver 解决 spring 框架底层的异样。
-
- response.sendError(HttpServletResponse.SC_BAD_REQUEST, ex.getMessage());
-
自定义异样解析器
:实现 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(505,"我喜爱的异样"); }catch (IOException e){e.printStackTrace(); } return new ModelAndView();} }
默认级别以及最高和最低级别:
上面能够看到咱们自定义的异样解决类曾经在第一名了
ErrorViewResolver 实现自定义解决异样
;(这个个别不去自定义)
-
-
tomcat 只有一感知到应用 response.sendError 跳转页面。/error 申请就会转给 controller
- 转给 controller 的形式有两个:
- 第一个是显著的调用 sendError;
- 第二个是你的异样没有任何人能解决(异样解析器返回的 ModelAndView 为 null)。tomcat 底层 response.sendError。error 申请就会转给 controller
- basicErrorController 要去的页面地址是 ErrorViewResolver 解析;
- 最终只有没人能解析异样,都会被 basicErrorController 捕捉。
-
正文完