SpringBoot全局异常处理-原理分析

1.概述

在日常开发中,如何快速定位异常并处理异常,体现了一个研发人员解决问题的能力,需要不断在业务发展中精进自己的业务水平,提升对原理的理解。快速解决的前提是快速定位问题,合理的异常处理能够帮助我们快速抛出问题。在SpringBoot中,全局异常处理能够有效降低异常代码数量,提供统一的异常处理模式,帮助我们从代码层面优雅地抛出异常。本文将演示SpringBoot中全局异常使用,并进行原理分析。

2.全局异常处理器

2.1 定义错误枚举类

随着业务的不断发展,系统可能会变得越来约庞大,可能产生和处理的异常就会逐渐增多,统一的异常文档说明必不可少,它能有效提供异常描述,进而进行异常定位。在JAVA语言中,通常采用枚举类统一定义异常编码与说明,如下图所示:

public enum ExceptionEnum {
   

    // 数据操作错误定义
    SUCCESS("2000", "成功!"),
    CODE_8001("8001", "Service unavailable"),
    CODE_8002("8002", "JSON exception"),
    CODE_8003("8003", "Parameter is invalid"),
    CODE_8004("8004", "Db error"),
    CODE_8005("8005", "{0}参数不能为空"),


    BODY_NOT_MATCH("4000", "请求的数据格式异常:{0}"),
    SIGNATURE_NOT_MATCH("4001", "请求的数字签名不匹配:{0}"),
    NOT_FOUND("4004", "未找到该资源:{0}"),
    INTERNAL_SERVER_ERROR("5000", "服务器内部错误:{0}"),
    SERVER_BUSY("5003", "服务器正忙,请稍后再试:{0}");


    private final String errorCode;
    private final String errorMsg;

    ExceptionEnum(String errorCode, String errorMsg) {
   
        this.errorCode = errorCode;
        this.errorMsg = errorMsg;
    }

    public String getCode() {
   
        return this.errorCode;
    }

    public String getErrorMsg() {
   
        return this.errorMsg;
    }
}

2.2 自定义异常类

自定义异常类可以定义异常返回码与返回内容,方便在处理异常时能够快速理解异常内容,定位异常原因,代码如下:

@Slf4j
public class BaseException extends RuntimeException {
   

    private Object[] args;

    private ExceptionEnum exceptionEnum;

    public BaseException() {
   
    }

    public BaseException(String message, Throwable t) {
   
        super(message, t);
    }

    public Object[] getArgs() {
   
        return args;
    }

    public void setArgs(Object[] args) {
   
        this.args = args;
    }

    public ExceptionEnum getErrorCode() {
   
        return exceptionEnum;
    }

    public void setErrorCode(ExceptionEnum errorCode) {
   
        this.exceptionEnum = errorCode;
    }

    public BaseException(ExceptionEnum errorCode, Object... args) {
   
        this.exceptionEnum = errorCode;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值