自定义谬误页
- 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 捕捉。