当前位置: 首页 > news >正文

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

我们在项目初始化的工作之一就是要自定义异常处理,用来处理项目中出现的各种异常,如业务异常、系统异常等等。
这些属于项目的通用基础代码,在任何后端中都可以复用。

1. 自定义错误码

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

小技巧:

  1. 自定义错误码时,建议和主流的错误码含义保持一致,如HTTP错误码
  2. 错误码不要连续,预留一些间隔,便于后续扩展
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,而是自定义一个业务异常,和内置异常类区分开来,便于定制化输出错误信息:

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,类似断言类,简化抛异常的代码:


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));}
}
http://www.lryc.cn/news/526262.html

相关文章:

  • Windows10安装MySQL找不到MSVCR120.dll和MSVCP120.dll问题解决
  • 【嵌入式】总结——Linux驱动开发(三)
  • 计算机图形学:实验三 光照与阴影
  • 「 机器人 」扑翼飞行器混合控制策略缺点浅谈
  • 蓝桥杯算法日常|c\c++常用竞赛函数总结备用
  • 每日十题八股-2025年1月24日
  • tomcat的accept-count、max-connections、max-threads三个参数的含义
  • 【无标题】mysql python 连接
  • linux naive代理设置
  • [STM32 - 野火] - - - 固件库学习笔记 - - -十一.电源管理系统
  • DBO优化最近邻分类预测matlab
  • 【深入理解FFMPEG】命令行阅读笔记
  • 图形化数据报文转换映射工具
  • 智能体0门槛开发
  • ssh密钥登录GitHub时一直提示“Error: Permission denied (publickey)”
  • mapbox加载geojson,鼠标移入改变颜色,设置样式以及vue中的使用
  • 考研机试题:打印日期
  • OpenHarmonyOS 3.2 编译生成的hap和app文件的名称如何配置追加版本号?
  • 【openwrt】openwrt odhcpd配置介绍
  • 基于神经网络的视频编码NNVC(1):帧内预测
  • Android开发,待办事项提醒App的设计与实现
  • 豆瓣Top250电影的数据采集与可视化分析(scrapy+mysql+matplotlib)
  • MySQL索引——让查询飞起来
  • Springboot集成Elasticsearch8.0(ES)版本,采用JAVA Client方式进行连接和实现CRUD操作
  • 【Linux】APT 密钥管理迁移指南:有效解决 apt-key 弃用警告
  • 洛谷P1143 进制转换
  • 99.12 金融难点通俗解释:毛利率
  • HUMANITY’S LAST EXAM (HLE) 综述:人工智能领域的“最终考试”
  • C++从入门到实战(二)C++命名空间
  • C# OpenCV机器视觉:实现农作物病害检测