• 自定义谬误页
    • 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)  //优先级,数字越小优先级越高@Componentpublic 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 捕捉。