zoukankan      html  css  js  c++  java
  • 三、SpringBoot异常处理(SpringBoot系列)

    自定义异常页面

    1. 直接在static/error目录下添加静态页面,文件名为状态码(500.html),不用再额外设置,会返回指定页面,也支持模糊匹配 (5xx.html)

    2. 使用thymeleaf生成动态页面,放在thymeleaf/error 目录下,同上,文件名设为状态名,遇到错误时,会直接跳转、

    3. 当静态异常页面和动态异常页面两个都储存在时,优先级

      thymeleaf精准匹配页面 > 静态精准匹配页面 > thymeleaf模糊匹配页面 > 静态模糊匹配页面

    image-20210517213156122

    自定义异常页面的原理

    建议自己在ErrorMvcAutoConfiguration中跟一下源码

    1. 在ErrorMvcAutoConfiguration 类中静态内部类DefaultErrorViewResolverConfiguration中提供了DefaultErrorViewResolver

      image-20210517213640921

    2. DefaultErrorViewResolver中resolveErrorView()方法

      image-20210517215454583

      1. 从SpringBoot默认四个放置静态文件的目录中匹配

    image-20210517214646083

    自定义异常数据:

    ErrorMvcAutoConfiguration类中提供了一个DefaultErrorAttributes处理异常数据,我们可以直接继承DefaultErrorAttributes,重写接口ErrorAttributes中getErrorAttrobutes()方法,基于DefaultErrorAttributes已经处理过的异常数据进行修改(若直接继承ErrorAttributes重写方法,还需要自己处理异常,比较麻烦):

    image-20210517220602382

    image-20210517221043463

    实现:

    @Component
    public class MyErrorAttribute extends DefaultErrorAttributes {
        @Override
        public Map<String, Object> getErrorAttributes(WebRequest webRequest, boolean includeStackTrace) {
            Map<String, Object> map = super.getErrorAttributes(webRequest, includeStackTrace);
            map.put("myError", "自定义的异常信息!");
            return map;
        }
    }
    

    自定义异常视图:

    异常处理视图和 自定义异常页面 默认都是DefaultErrorViewResolver处理的,若想自定义,也可继承DefaultErrorViewResolver,基于它的基础进行修改

    image-20210517221613503

    实现:

    @Component
    public class MyErrorViewResolver extends DefaultErrorViewResolver {
        public MyErrorViewResolver(ApplicationContext applicationContext, ResourceProperties resourceProperties) {
            super(applicationContext, resourceProperties);
        }
        
        @Override
        public ModelAndView resolveErrorView(HttpServletRequest request, HttpStatus status, Map<String, Object> model) {
            // model是异常数据,是不可修改map
            // 我们也可以直接在这里自定义异常数据,不过要新建一个map,在把值赋值过去
            ModelAndView mv = new ModelAndView();
            mv.setViewName("error");
            mv.addAllObjects(model);
            return mv;
        }
    }
    
  • 相关阅读:
    ASP.NET 实现验证码以及刷新验证码
    使用纯生js操作cookie
    TesseractOCR Tutorials
    c# 解析JSON的几种办法
    ElasticSearch常用查询命令-kibana中使用
    ElasticSearch集成IK分词器
    Typora使用教程 之 PicGo集成做图床
    Kibana-CentOS7单机安装测试
    Elasticsearch-CentOS7单机安装测试
    CentOS7安装JDK8
  • 原文地址:https://www.cnblogs.com/zhaoyuan72/p/14778915.html
Copyright © 2011-2022 走看看