异常与错误码规范
此规则定义了项目的异常处理体系,包括异常类型、错误码、错误消息格式等。它确保所有错误响应保持一致的结构和语义。
适用范围:
src/main/java/com/example/order/exception/**/*.javasrc/main/java/com/example/order/controller/**/*.javasrc/main/java/com/example/order/service/**/*.java
exception-error-code.mdc
---
description: 异常与错误处理规范
globs:
- src/main/java/com/example/order/exception/**/*.java
- src/main/java/com/example/order/controller/**/*.java
- src/main/java/com/example/order/service/**/*.java
alwaysApply: false
---
# 异常与错误码规范
## 异常类体系
项目使用简化的异常体系,所有异常都继承自 `Exception`:
| 异常类 | HTTP 状态码 | 使用场景 |
| ----------------------- | ----------- | ---------------------------------------------- |
| `BadRequestException` | 400 | 参数校验失败、请求格式错误 |
| `BizException` | 400 | 业务规则校验失败(继承自 BadRequestException) |
| `UnauthorizedException` | 401 | 未认证 |
| `ForbiddenException` | 403 | 无权限访问 |
| `NotFoundException` | 404 | 资源不存在 |
### 异常类结构
所有异常只接收 message 参数,不使用错误码:
```java
// com.example.order.exception.BizException
public class BizException extends BadRequestException {
public BizException(String message) {
super(message);
}
}
```
## 异常抛出时机
### Service 层抛出业务异常
```java
// 资源不存在
public User getUserById(Long userId) throws NotFoundException {
return userRepository.findById(userId)
.orElseThrow(() -> new NotFoundException("user not found with id: " + userId));
}
// 业务规则校验
if (order.isCancelled()) {
throw new BizException("can not update order because it is already cancelled");
}
// 权限校验
if (!hasPermission) {
throw new ForbiddenException("user does not have the permission to update order");
}
```
### 错误消息格式
- 使用小写开头的英文描述
- 包含关键业务信息(如 ID、名称等)
- 格式:`"{resource} not found with {field}: {value}"`
## 全局异常处理
`ControllerAdvice` 统一处理所有异常,返回 `ErrorVO`:
```java
// com.example.order.vo.ErrorVO
public class ErrorVO {
private String errorCode; // 大写下划线格式:BAD_REQUEST, NOT_FOUND
private String errorMessage; // 异常的 getMessage()
}
```
### 预定义 errorCode
| errorCode | 对应异常 |
| ----------------------- | --------------------------------- |
| `BAD_REQUEST` | BadRequestException, BizException |
| `UNAUTHORIZED` | UnauthorizedException |
| `FORBIDDEN` | ForbiddenException |
| `NOT_FOUND` | NotFoundException |
| `INTERNAL_SERVER_ERROR` | 其他未处理异常 |
## 注意事项
1. **不要新增异常类型**:使用现有的四种异常即可
2. **不要修改 ControllerAdvice**:全局异常处理逻辑已固化
3. **Controller 方法签名声明 `throws Exception`**:让所有异常向上传播最后更新于: