3、定制错误处理逻辑

35岁危机
• 阅读 711
  • 自定义错误页
    • error/404.html error/5xx.html;有精确的错误状态码页面就匹配精确,没有就找 4xx.html;如果都没有就触发白页3、定制错误处理逻辑

  • @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());3、定制错误处理逻辑

  • 自定义异常解析器:实现 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();
      }
    }

    默认级别以及最高和最低级别:
    3、定制错误处理逻辑
    3、定制错误处理逻辑

下面可以看到我们自定义的异常处理类已经在第一名了

3、定制错误处理逻辑


  • ErrorViewResolver 实现自定义处理异常;(这个一般不去自定义)
    • tomcat只要一感知到使用response.sendError跳转页面 。/error请求就会转给controller

      • 转给controller的方式有两个:
      • 第一个是明显的调用sendError;
      • 第二个是你的异常没有任何人能处理(异常解析器返回的ModelAndView为null)。tomcat底层 response.sendError。error请求就会转给controller
    • basicErrorController 要去的页面地址是 ErrorViewResolver 解析 ;
    • 最终只要没人能解析异常,都会被basicErrorController 捕获。
点赞
收藏
评论区
推荐文章
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
美凌格栋栋酱 美凌格栋栋酱
7个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
虾米大王 虾米大王
3年前
java代码036
code036.jsp错误处理页错误提示:
虾米大王 虾米大王
3年前
java代码016
code016.jsp错误处理页
Stella981 Stella981
3年前
SpringBoot项目中自定义404页面
1错误处理有原理分析使用SpringBoot创建的web项目中,当我们请求的页面不存在(http状态码为404),或者服务器发生异常(http状态码一般为500)时,SpringBoot就会给我们返回错误信息。也就是说,在SpringBoot的web项目中,会自动创建一个/error的错误接口,来返回错误信息。但是针对不同的访问方式,会有以下两种
Stella981 Stella981
3年前
Nginx配置自定义502页面
公司项目需要维护,没有502页面,每次访问直接是nginx默认的502。贴代码看下错误拦截是否开启 fastcgi\_intercept\_errorson;如果开启,进行下一步操作   error\_page 404500502503504 /502.html;  location/502.html{
Wesley13 Wesley13
3年前
VBox 启动虚拟机失败
在Vbox(5.0.8版本)启动Ubuntu的虚拟机时,遇到错误信息:NtCreateFile(\\Device\\VBoxDrvStub)failed:0xc000000034STATUS\_OBJECT\_NAME\_NOT\_FOUND(0retries) (rc101)Makesurethekern
Easter79 Easter79
3年前
SpringBoot项目中自定义404页面
1错误处理有原理分析使用SpringBoot创建的web项目中,当我们请求的页面不存在(http状态码为404),或者服务器发生异常(http状态码一般为500)时,SpringBoot就会给我们返回错误信息。也就是说,在SpringBoot的web项目中,会自动创建一个/error的错误接口,来返回错误信息。但是针对不同的访问方式,会有以下两种
Stella981 Stella981
3年前
SpringBoot日记——错误页处理的配置篇
 在我们访问页面的时候经常会遇到各种问题,比如404,400,500,502等等,可返回的错误页对用户来讲,并不太亲民,所以要定制一下自己的错误页。 我们先访问一个错误页面,看下效果:(虽然给我们提供了错误时间、类型、状态码、错误信息,但是好丑,而且用户也不知道这是什么意思)!(https://oscimg.oschina.net/oscnet
Easter79 Easter79
3年前
SpringBoot日记——错误页处理的配置篇
 在我们访问页面的时候经常会遇到各种问题,比如404,400,500,502等等,可返回的错误页对用户来讲,并不太亲民,所以要定制一下自己的错误页。 我们先访问一个错误页面,看下效果:(虽然给我们提供了错误时间、类型、状态码、错误信息,但是好丑,而且用户也不知道这是什么意思)!(https://oscimg.oschina.net/oscnet
Java服务总在半夜挂,背后的真相竟然是... | 京东云技术团队
最近有用户反馈测试环境Java服务总在凌晨00:00左右挂掉,用户反馈Java服务没有定时任务,也没有流量突增的情况,Jvm配置也合理,莫名其妙就挂了