应抛出自定义运行时异常WithdrawLimitExceededException;该类继承RuntimeException,含带参构造方法;业务中校验当日累计提现是否超限,超限时用格式化消息抛出异常;建议通过@ControllerAdvice统一处理并返回400或422响应。

在Java中实现提现功能时,若用户请求的提现金额超过系统设定的每日限额,应主动抛出一个自定义异常 WithdrawLimitExceededException,以明确表达业务约束并便于上层统一处理。
定义 WithdrawLimitExceededException 异常类
该异常应继承 RuntimeException(运行时异常),避免强制调用方显式 try-catch,符合业务校验类异常的设计惯例:
// 自定义异常,无需声明 throws
public class WithdrawLimitExceededException extends RuntimeException {
public WithdrawLimitExceededException(String message) {
super(message);
}
public WithdrawLimitExceededException(String message, Throwable cause) {
super(message, cause);
}
}
在提现服务中校验并抛出异常
业务逻辑中需获取用户当日已提现总额,并与当前请求金额累加后对比日限额。不满足则立即抛出异常:
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
- 从数据库或缓存查询该用户今日已成功提现总金额(例如通过
withdrawService.getTodayWithdrawnAmount(userId)) - 计算:已提现金额 + 当前申请金额 > 日限额(如 50000)
- 条件成立时,构造带具体数值的提示信息并抛出异常:
throw new WithdrawLimitExceededException(String.format(
"单日提现限额为 %d 元,当前已提 %d 元,本次申请 %d 元将超出限制",
dailyLimit, todayWithdrawn, amount));
统一异常处理(可选但推荐)
在 Spring Web 环境中,可通过 @ControllerAdvice 捕获该异常并返回标准错误响应:
立即学习“Java免费学习笔记(深入)”;
- 状态码设为
400 Bad Request或业务专用码(如422 Unprocessable Entity) - 响应体包含错误码(如
"WITHDRAW_LIMIT_EXCEEDED")、提示信息和必要参数(如remainingLimit) - 避免将堆栈信息暴露给前端,确保用户体验与系统安全

















