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

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

为了统一管理异常,在项目中封装了自定义异常类(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.lryc.cn/news/573282.html

相关文章:

  • 数据分析实操篇:京东淘宝商品实时数据获取与分析
  • Python 的内置函数 hash
  • NVIDIA cuFFTDx文档笔记
  • 资产设备管理系统,Java + Vue,移动端+后台管理,实现设备全生命周期信息精准管控与高效运维
  • Windows/Linux系统 Ollama部署deepseek 大模型
  • 面试题-定义一个函数入参数是any类型,返回值是string类型,如何写出这个函数,代码示例
  • 跨标签页通信(三):Web Storage
  • C# WPF常用调试工具汇总
  • 如何定时发布WordPress文章(多种方法)
  • 【Redis】深入理解 Redis 事务:命令、应用与实战案例
  • CertiK联创顾荣辉将于港大活动发表演讲,分享Web3安全与发展新视角
  • C#测试调用ClosedXML根据批注设置excel单元格内容
  • 企业公用电脑登录安全管控的终极方案:ASP操作系统安全登录管控方案
  • 亚马逊认证考试系列 - 第一部份:基础服务 - AWS SAA C03
  • 客户端面经
  • 决策树:化繁为简的智能决策利器
  • 【Kubernetes】从零搭建K8s集群:虚拟机环境配置全指南(DNS/网络/防火墙/SELinux全解析一站式配置图文教程)
  • 题解:P11501 [ROIR 2019] 探险队(Day 2)
  • FPGA四十年创新:因仿真加速而生,AI加速而盛!
  • 【RTP】基于mediasoup的RtpPacket的H.264打包、解包和demo 2:含扩展
  • 11.RSTP快速生成树协议深度剖析:结合华为eNSP模拟器的完整实验方案
  • 为什么要BRE
  • LLM-201: OpenHands与LLM交互链路分析
  • 【基础算法】二分(二分查找 + 二分答案)
  • 华为云Flexus+DeepSeek征文|体验华为云ModelArts快速搭建Dify-LLM应用开发平台并创建b站视频总结大模型
  • Vue3 + TypeScript 中 let data: any[] = [] 与 let data = [] 的区别
  • C++ 内存分配器的作用
  • AI+预测3D新模型百十个定位预测+胆码预测+去和尾2025年6月21日第115弹
  • 【舞蹈】编排:如何对齐拍子并让小节倍数随BPM递减
  • 56-Oracle SQL Tuning Advisor(STA)