SpringBoot全局异常页面处理学习

首先我们先在控制器中写一个异常,默认情况下我们的SpringBoot异常页面是这个样子的。

示例代码如下:

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @author qinxun
 * @date 2023-06-15
 * @Descripion: 测试
 */
@RestController
public class IndexController {

    @GetMapping("/index")
    public String toIndex() {
        // 500状态码
        int i = 1 / 0;
        return "index";
    }
}

SpringBoot全局异常页面处理学习_第1张图片

 一、自定义静态异常页面

自定义静态异常页面,我们可以分成两种方式,第一种就是使用HTTP状态码来命名页面,例如404.html,403.html,500html等。另一种就是直接定义一个4xx.html,表示400-499状态码的页面,5xx.html表示状态码500-599的异常页面。

我们在classpath:/static/error/路径下定义相关异常页面

SpringBoot全局异常页面处理学习_第2张图片

 4xx.html




    
    Title


  
Http状态码400-499的异常页面

5xx.html




    
    Title


Http状态码500-599的异常页面

启动项目,如果项目抛出HTTP状态码500的错误,就会自动显示5xx.html这个页面,反之抛出状态码400的错误,就会显示4xx.html这个页面。

SpringBoot全局异常页面处理学习_第3张图片

 二、自定义动态异常页面

SpringBoot全局异常页面处理学习_第4张图片

 4xx.html




    
    Title


4xx

path error message status

5xx.html




    
    Title


5xx

path error message status

如果动态异常页面和静态异常页面同时存在,默认使用动态页面,完整的错误页面查找方式应该是:

发生500错误->查找动态500.html页面->查找静态500.html页面->查找动态5xx.html页面->查找静态5xx.html页面

页面上使用的path、error、message、status默认为SpringBoot的异常机制返回的。

我们重新访问接口:

SpringBoot全局异常页面处理学习_第5张图片

 我们可以创建一个自定义类实现异常数据返回处理。

示例代码如下:

import org.springframework.boot.web.error.ErrorAttributeOptions;
import org.springframework.boot.web.servlet.error.DefaultErrorAttributes;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.WebRequest;

import java.util.Map;

/**
 * @author qinxun
 * @date 2023-06-16
 * @Descripion: 自定义异常数据返回
 */
@Component
public class MyErrorAttributes extends DefaultErrorAttributes {
    @Override
    public Map getErrorAttributes(WebRequest webRequest, ErrorAttributeOptions options) {
        Map map = super.getErrorAttributes(webRequest, options);
        if ((Integer) map.get("status") == 500) {
            map.put("message", "服务器内部错误!");
        }
        return map;
    }
}

启动项目,我们重新访问接口:

SpringBoot全局异常页面处理学习_第6张图片

 异常页面显示了我们自定义的异常数据。

你可能感兴趣的:(SpringBoot,spring,boot,java,spring)