You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java中如何传递含401未授权异常的Throwable对象?

解决方法:构造401未授权异常并传入回调

嘿,我来帮你搞定这个需求!你需要给tokenCallback.failure()传入一个明确代表401未授权的Throwable实例,结合你的现有代码,这里有两种实用的实现方式:

1. 利用现成的AuthFailureError(适合已有框架的场景)

你代码里已经注释了new AuthFailureError(),其实这就是个很好的选择——很多网络框架(比如Volley)里的AuthFailureError本身就用来表示认证失败,刚好对应401未授权场景。你可以给它加上明确的错误消息,让回调方更清楚异常原因:

修改你的else分支代码:

}else{ 
    // token已过期,构造401未授权异常
    Log.e(TAG,"token expired"); 
    // 创建带提示消息的AuthFailureError
    Throwable unauthorizedError = new AuthFailureError("401 Unauthorized: Access Token已过期,请重新认证");
    tokenCallback.failure(unauthorizedError); 
}

如果你的AuthFailureError支持传入HTTP响应对象,还可以直接指定状态码,让异常信息更精准:

// 假设框架支持通过NetworkResponse构造(比如Volley的实现)
NetworkResponse response = new NetworkResponse(401, null, null, false);
Throwable unauthorizedError = new AuthFailureError(response);
tokenCallback.failure(unauthorizedError);

2. 自定义401专属异常类(适合无现成框架的场景)

如果项目里没有现成的认证失败异常类,你可以自己定义一个,让异常类型更清晰:

先创建自定义异常类:

public class UnauthorizedException extends RuntimeException {
    // 无参构造,默认提示401
    public UnauthorizedException() {
        super("401 Unauthorized: 未授权访问");
    }

    // 带自定义消息的构造
    public UnauthorizedException(String message) {
        super(message);
    }
}

然后在你的代码中使用这个异常:

}else{ 
    Log.e(TAG,"token expired"); 
    Throwable unauthorizedError = new UnauthorizedException("Access Token已过期,需要重新登录");
    tokenCallback.failure(unauthorizedError); 
}

额外小提示:回调方如何识别401异常

为了让处理回调的代码能准确判断这是401未授权异常,可以在回调实现中做类型判断:

tokenCallback = new TokenCallback() {
    @Override
    public void success(String token) {
        // 处理token可用的逻辑
    }

    @Override
    public void failure(Throwable throwable) {
        // 判断是否是401相关异常
        if (throwable instanceof AuthFailureError || throwable instanceof UnauthorizedException) {
            // 执行重新登录、刷新token等逻辑
            Log.e(TAG, "触发401未授权:" + throwable.getMessage());
        } else {
            // 处理其他类型的异常
        }
    }
};

内容的提问来源于stack exchange,提问作者sagar suri

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:35:38