美文网首页
springboot异常处理机制

springboot异常处理机制

作者: 风雪_夜归人 | 来源:发表于2023-11-21 20:28 被阅读0次

默认异常处理机制

  • springboot底层提供了BasicErrorController控制器,用来处理/error错误请求

  • springboot在映射请求时,一旦出现异常信息,就会转发一个新的错误请求/error

    • 浏览器请求服务器,服务器将请求交个springboot
      1.情况1:springboot没有找到与之匹配的映射(文件资源,操作资源),此时就会有404错误
      springboot会转发404错误,转发的请求是/error
      2.情况2:springboot找到了与之匹配的请求,调用对应controller方法
      在controller方法执行过程中产生了异常(controller,service,dao),此时就会有500错误
      springboot会转发这个500错误,转发的请求就是/error
  • BasicErrorController做了什么处理呢?
    + 不同的设备发送相同的请求,产生相同的错误结果,会有不同的错误显示
    1.浏览器发送请求,会看到一个错误页面


    image.png
    2.接口工具发送请求,会看到一个json数据
    
image.png
  • 底层如何区分请求设备的不同呢?
    1.根据请求头中accept的值

    浏览器请求的值 image.png
    swagger(设备)请求的值
    image.png
  • 看下源码


    image.png

指定错误页

  • 实际开发中,出现错误后,不应该给用户显示一个空白页面,应该显示一个较为友好的错误页面

  • 具体方式如下
    1.在resources中创建public文件夹,创建error文件夹,在文件夹中根据错误码提供对应的错误页面

    • 注意1:可以提供4xx.html 或者 5xx.html 作为所有4开头错误页面
    • 注意2:如果404和xxx同时存在,会优先404错误页面显示

    2.在resources/templates中创建error文件夹,在文件夹中提供错误页 400.html、4xx.html
    与方式一不同的是,方式一提供的错误页都是静态页,内容不能改变
    方式二提供的错误页都是动态页面,可以动态更改数据
    注意:方式一和方式二同时存在,方式二优先生效

    3.自定义错误视图处理器,可以自定义根据不同的错误码,提供不同的错误页面
    注意:一旦提供了自定义错误视图解析器,默认的错误视图解析器就无效了。

  @Component
  public class MyErrorViewResover implements ErrorViewResolver{
      public ModelAndView resolveErrorView(HttpServlet req,HttpStatus status,Map<String Object> model){
        ModelAndView mv = new ModelAndView();
        if(status == HttpStatus.NOT_FOUND){
          mv.setViewName("error/notFound");
          mv.addObject("msg","资源不存在");
        }else{
          mv.setViewName("error/5xx");
        }
      return mv;
    }
}

相关文章

网友评论

      本文标题:springboot异常处理机制

      本文链接:https://www.haomeiwen.com/subject/wlofwdtx.html