美文网首页
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