【项目初始化】自定义异常处理

我们在项目初始化的工作之一就是要自定义异常处理,用来处理项目中出现的各种异常,如业务异常、系统异常等等。

这些属于项目的通用基础代码,在任何后端中都可以复用。

1. 自定义错误码

自定义错误码,对错误进行收敛,便于前端统一处理

小技巧:

  1. 自定义错误码时,建议和主流的错误码含义保持一致,如HTTP错误码
  2. 错误码不要连续,预留一些间隔,便于后续扩展
java 复制代码
import lombok.Getter;

@Getter
public enum ErrorCode {

    SUCCESS(0, "ok"),
    PARAMS_ERROR(40000, "请求参数错误"),
    NOT_LOGIN_ERROR(40100, "未登录"),
    NO_AUTH_ERROR(40101, "无权限"),
    NOT_FOUND_ERROR(40400, "请求数据不存在"),
    FORBIDDEN_ERROR(40300, "禁止访问"),
    SYSTEM_ERROR(50000, "系统内部异常"),
    OPERATION_ERROR(50001, "操作失败");

    /**
     * 状态码
     */
    private final int code;

    /**
     * 信息
     */
    private final String message;

    ErrorCode(int code, String message) {
        this.code = code;
        this.message = message;
    }

}

2. 自定义异常类

一般不建议直接抛出Java内置的RuntimeException,而是自定义一个业务异常,和内置异常类区分开来,便于定制化输出错误信息:

java 复制代码
import lombok.Getter;

/**
 * @Description: 自定义异常类
 */
@Getter
public class BusinessException extends RuntimeException {
    /**
     * 状态码
     */
    private final int code;

    public BusinessException(int code, String message) {
        super(message);
        this.code = code;
    }

    public BusinessException(ErrorCode errorCode) {
        super(errorCode.getMessage());
        this.code = errorCode.getCode();
    }

    public BusinessException(ErrorCode errorCode, String message) {
        super(message);
        this.code = errorCode.getCode();
    }

}

ThrowUtils

为了更方便抛出异常,可以封装一个ThrowUtils,类似断言类,简化抛异常的代码:

java 复制代码
public class ThrowUtils {

    /**
     * 条件成立则抛异常
     * @param condition
     * @param runtimeException
     */
    public static void throwIf(boolean condition, RuntimeException runtimeException) {
        if (condition){
            throw runtimeException;
        }
    }

    /**
     * 条件成立则抛异常
     * @param condition
     * @param errorCode
     */
    public static void throwIf(boolean condition, ErrorCode errorCode) {
        throwIf(condition, new BusinessException(errorCode));
    }

    /**
     * 条件成立则抛异常
     * @param condition
     * @param errorCode
     * @param message
     */
    public static void throwIf(boolean condition, ErrorCode errorCode, String message) {
        throwIf(condition,new BusinessException(errorCode,message));
    }
}
相关推荐
道可到2 分钟前
百度面试真题 Java 面试通关笔记 04 |JMM 与 Happens-Before并发正确性的基石(面试可复述版)
java·后端·面试
飞快的蜗牛23 分钟前
利用linux系统自带的cron 定时备份数据库,不需要写代码了
java·docker
聪明的笨猪猪1 小时前
Java Spring “IOC + DI”面试清单(含超通俗生活案例与深度理解)
java·经验分享·笔记·面试
ThisIsMirror1 小时前
CompletableFuture并行任务超时处理模板
java·windows·python
珹洺2 小时前
Java-Spring入门指南(二十一)Thymeleaf 视图解析器
java·开发语言·spring
源码集结号2 小时前
一套智慧工地云平台源码,支持监管端、项目管理端,Java+Spring Cloud +UniApp +MySql技术开发
java·mysql·spring cloud·uni-app·源码·智慧工地·成品系统
EnCi Zheng2 小时前
Spring Security 最简配置完全指南-从入门到精通前后端分离安全配置
java·安全·spring
程序员小假2 小时前
为什么这些 SQL 语句逻辑相同,性能却差异巨大?
java·后端
泉城老铁3 小时前
springboot实现对接poi 导出excel折线图
java·spring boot·后端
金銀銅鐵3 小时前
[Java] 如何自动生成简单的 Mermaid 类图
java·后端