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

项目中后端如何处理异常?

为了统一管理异常,在项目中封装了自定义异常类(BusinessException),全局异常处理器(GlobalExceptionHandler), 以及一些状态码(ErrorCode), 便于前端统一处理异常.

主要流程如下:

  1. 当项目业务发生逻辑错误时,会抛出BusinessException, 其中包含自定义错误码和信息.
  2. GlobalExceptionHandler 会捕获这个 BusinessException,并返回一个统一的响应给前端.
  3. 如果是未预料到的系统内部异常(RountimeException),GlobalExceptionHandler 也会捕捉, 并统一返回给前端错误码(50000) 和错误信息(系统内部异常).

这样便于便于前端快速定位错误原因, 便于在后续不同场景下精细化管理异常.

代码如下
BussinessException

@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();  }  }

ErrorCode

@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;  }  }

GlobalExceptionHeader

/**  * 全局异常处理器  */  
@RestControllerAdvice  
@Slf4j  
public class GlobalExceptionHandler {  @ExceptionHandler(NotLoginException.class)  public BaseResponse<?> notLoginException(NotLoginException e) {  log.error("NotLoginException", e);  return ResultUtils.error(ErrorCode.NOT_LOGIN_ERROR, e.getMessage());  }  @ExceptionHandler(NotPermissionException.class)  public BaseResponse<?> notPermissionExceptionHandler(NotPermissionException e) {  log.error("NotPermissionException", e);  return ResultUtils.error(ErrorCode.NO_AUTH_ERROR, e.getMessage());  }  @ExceptionHandler(BusinessException.class)  public BaseResponse<?> businessExceptionHandler(BusinessException e) {  log.error("BusinessException", e);  return ResultUtils.error(e.getCode(), e.getMessage());  }  @ExceptionHandler(RuntimeException.class)  public BaseResponse<?> businessExceptionHandler(RuntimeException e) {  log.error("RuntimeException", e);  return ResultUtils.error(ErrorCode.SYSTEM_ERROR, "系统错误");  }  
}
http://www.xdnf.cn/news/14686.html

相关文章:

  • JAVA锁机制:对象锁与类锁
  • 一、什么是生成式人工智能
  • GPT-1 与 BERT 架构
  • MySQL之InnoDB存储引擎深度解析
  • 软件工程期末试卷填空题版带答案(共40道)
  • 【环境配置】在Ubuntu Server上安装5090 PyTorch环境
  • CVE-2024-6387漏洞、CVE-2025-26465漏洞、CVE-2025-26466漏洞 一口气全解决
  • 题解:P11501 [ROIR 2019] 探险队(Day 2)
  • 【软考高级系统架构论文】论无服务器架构及其应用
  • 在 `setup` 函数中使用 Vuex
  • 通过 Lambda + API Gateway + 外部 API 实现。
  • Django数据库迁移
  • LLM:重构数字世界的“智能操作系统”
  • Java面试题025:一文深入了解数据库Redis(1)
  • Docker高级管理--容器通信技术与数据持久化
  • 【ubuntu下小工具】Crontab定时任务进行数据备份和清理
  • 【AGI】突破感知-决策边界:VLA-具身智能2.0
  • 格兰泰勒棱镜透射光强曲线优化处理
  • 嵌入式开发之嵌入式系统架构如何搭建?
  • Java ArrayList集合和HashSet集合详解
  • day38 打卡
  • 基于Python、tkinter、sqlite3 和matplotlib的校园书店管理系统
  • 多线程八股
  • Shell脚本中和||语法解析
  • tkinter Text 组件学习指南
  • 创业知识概论
  • 机器学习流量识别(pytorch+NSL-KDD+多分类建模)
  • 深入解析BERT:语言分类任务的革命性引擎
  • 5G 浪潮:发展全景、困境突围与未来航向
  • 目标检测新升级:用YOLOv8打造密度视频热力图可视化