news 2026/4/24 13:23:47

简单业务异常类

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
简单业务异常类

一、最简版本(适合新手)

import lombok.Getter; /** * 业务异常 - 最简单版本 */ @Getter public class BusinessException extends RuntimeException { private final Integer code; // 错误码 // 构造方法1:指定错误码和消息 public BusinessException(Integer code, String message) { super(message); this.code = code; } // 构造方法2:只传消息,默认500错误码 public BusinessException(String message) { this(500, message); } }

二、稍微丰富版本(推荐)

import lombok.Getter; /** * 业务异常 - 常用版本 */ @Getter public class BusinessException extends RuntimeException { private final Integer code; // 常用状态码定义 public static final Integer BAD_REQUEST = 400; // 请求参数错误 public static final Integer UNAUTHORIZED = 401; // 未授权 public static final Integer FORBIDDEN = 403; // 禁止访问 public static final Integer NOT_FOUND = 404; // 资源不存在 // 常用构造方法 public BusinessException(Integer code, String message) { super(message); this.code = code; } public BusinessException(String message) { this(500, message); } // 快速创建方法(静态工厂方法) public static BusinessException badRequest(String message) { return new BusinessException(BAD_REQUEST, message); } public static BusinessException notFound(String resourceName) { return new BusinessException(NOT_FOUND, resourceName + "不存在"); } public static BusinessException forbidden() { return new BusinessException(FORBIDDEN, "无权限访问"); } }

三、配合枚举使用

// 1. 先定义错误枚举 @Getter public enum ErrorCode { SUCCESS(200, "成功"), PARAM_ERROR(400, "参数错误"), UNAUTHORIZED(401, "未登录"), FORBIDDEN(403, "无权限"), NOT_FOUND(404, "资源不存在"), USER_NOT_FOUND(40401, "用户不存在"), SYSTEM_ERROR(500, "系统错误"); private final Integer code; private final String message; ErrorCode(Integer code, String message) { this.code = code; this.message = message; } } // 2. 修改异常类 @Getter public class BusinessException extends RuntimeException { private final Integer code; // 使用枚举构造 public BusinessException(ErrorCode errorCode) { super(errorCode.getMessage()); this.code = errorCode.getCode(); } // 自定义消息 public BusinessException(ErrorCode errorCode, String customMessage) { super(customMessage); this.code = errorCode.getCode(); } }

四、实际使用例子

@Service public class UserService { public User getUserById(Long id) { User user = userRepository.findById(id); // 情况1:直接抛异常 if (user == null) { throw new BusinessException(404, "用户不存在"); } // 情况2:使用快速方法 if (user.getStatus() == 0) { throw BusinessException.forbidden(); } // 情况3:使用枚举 if (user.getBalance() < 0) { throw new BusinessException(ErrorCode.PARAM_ERROR, "余额不能为负"); } return user; } public void transfer(Long fromId, Long toId, BigDecimal amount) { // 使用连串校验 User fromUser = userRepository.findById(fromId) .orElseThrow(() -> new BusinessException(ErrorCode.USER_NOT_FOUND)); if (fromUser.getBalance().compareTo(amount) < 0) { throw new BusinessException(400, "余额不足"); } // 业务逻辑... } }

五、全局异常处理

@RestControllerAdvice public class GlobalExceptionHandler { @ExceptionHandler(BusinessException.class) public Result<?> handleBusinessException(BusinessException e) { // 统一返回格式 return Result.error(e.getCode(), e.getMessage()); } @ExceptionHandler(Exception.class) public Result<?> handleOtherException(Exception e) { // 其他异常 log.error("系统异常", e); return Result.error(500, "系统异常"); } } // 统一返回结果 @Data class Result<T> { private Integer code; private String message; private T data; public static <T> Result<T> success(T data) { Result<T> result = new Result<>(); result.code = 200; result.message = "成功"; result.data = data; return result; } public static <T> Result<T> error(Integer code, String message) { Result<T> result = new Result<>(); result.code = code; result.message = message; return result; } }

六、总结要点

最简写法(记住这个就行):

public class BusinessException extends RuntimeException { private Integer code; public BusinessException(Integer code, String message) { super(message); this.code = code; } }

使用三部曲:

  1. 定义异常类(上面代码)

  2. 在需要的地方抛出

    if (条件不满足) { throw new BusinessException(400, "错误信息"); }
  3. 全局处理(返回统一格式)

记住几个常用错误码:

  • 400:参数错误

  • 401:未登录

  • 403:无权限

  • 404:不存在

  • 500:系统错误

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/22 1:36:35

wl-explorer:构建专业级Vue文件管理系统的技术实践

wl-explorer&#xff1a;构建专业级Vue文件管理系统的技术实践 【免费下载链接】wl-explorer 用于vue框架的文件管理器插件&#xff0c;云盘、网盘。File manager plug-in for vue framework, cloud disk. 项目地址: https://gitcode.com/gh_mirrors/wl/wl-explorer 在…

作者头像 李华
网站建设 2026/4/23 9:29:44

计算机毕业设计springboot基于Java考研学习平台 基于SpringBoot的Java考研在线学习与资源分享系统 SpringBoot+Java实现的考研备考综合服务平台

计算机毕业设计springboot基于Java考研学习平台019e97m5 &#xff08;配套有源码 程序 mysql数据库 论文&#xff09; 本套源码可以在文本联xi,先看具体系统功能演示视频领取&#xff0c;可分享源码参考。研究生考试竞争逐年白热化&#xff0c;考生对“随时可学、即时测评、资源…

作者头像 李华
网站建设 2026/4/17 10:10:04

12、Linux设备管理与日志系统全解析

Linux设备管理与日志系统全解析 1. 块设备概述 在Linux系统中, b 代表块设备(block devices)。块设备以数据块(一次处理多个字节)的方式进行通信,像硬盘驱动器和DVD驱动器都属于块设备。这些设备需要高速的数据吞吐量,所以以块为单位发送和接收数据。 2. 使用 lsb…

作者头像 李华
网站建设 2026/4/18 14:36:09

GEO系统赋能跨境品牌:多区域市场渗透与国际搜索认知构建策略

一、跨境品牌全球化布局的核心挑战在当前全球化电商环境中&#xff0c;跨境品牌面临多重挑战&#xff1a;区域市场差异性导致的本地化适应难题国际搜索引擎算法差异与用户搜索习惯差异品牌认知从零到一的建设成本高昂多语言、多文化背景下的内容营销策略制定困难二、GEO系统&am…

作者头像 李华
网站建设 2026/4/17 12:30:06

在应用中心的业务组件导入组件,但是在IDE里面看不到导入的组件。

问题描述: 在应用中心的业务组件导入组件&#xff0c;但是在IDE里面看不到导入的组件。 解决方案: 在系统变量-BUSINESS_COMPONENT_CENTER_URL中将内容置空&#xff1b; 置空后会走本地导入的市场组件&#xff0c;在低开中进行市场导入即可看到应用中心导入的业务组件&…

作者头像 李华