定义 authexception 需要继承 java.lang.exception,并显式提供包含消息和原因的构造函数。这样在抛出时可以直接携带错误信息,并在捕获时通过 getmessage() 或 getcause() 获取详情。

AuthException 的构造函数应包含哪些参数
构造函数必须调用父类 Exception 的构造方法以初始化异常链。通常需要提供两个构造函数:一个仅接收错误消息字符串,另一个同时接收错误消息和底层原因对象。这确保了异常既能独立存在,也能包裹其他异常。

public class AuthException extends Exception {
public AuthException(String message) {
super(message);
}
public AuthException(String message, Throwable cause) {
super(message, cause);
}
}
上述代码定义了标准结构。第一个构造函数用于简单场景,第二个用于包装如 NullPointerException 等运行时异常。调用 super(message) 会将消息存入异常内部字段,super(message, cause) 则同时设置堆栈跟踪和原因引用。
如何在使用中抛出 AuthException
在业务逻辑中,当检测到认证失败(如令牌过期、权限不足)时,直接实例化并抛出该异常。使用 try-catch 块捕获后,可记录日志或返回统一错误响应。由于是检查型异常,编译器会强制处理或声明抛出。

public void checkToken(String token) throws AuthException {
if (token == null || token.isEmpty()) {
throw new AuthException("Token is missing");
}
if (!isValid(token)) {
throw new AuthException("Invalid token", new IllegalArgumentException("Token format error"));
}
}
private boolean isValid(String token) {
return token.startsWith("valid_");
}
示例中 checkToken 方法声明了 throws AuthException。当令牌为空时抛出无原因异常;当令牌无效时抛出带原因的异常。调用方需捕获此异常,例如在控制器层返回 401 状态码。这种设计保证了错误信息的完整传递和类型安全。
AuthException 在多层架构中的传播路径
在 Spring Boot 等框架中,AuthException 可从 Service 层抛出,经 Controller 层捕获,最终由全局异常处理器转换为 JSON 响应。传播过程中,异常对象保持完整,包括消息和原因链。无需额外转换,只需在顶层统一处理即可。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











