异常处理
本节主要介绍升级版 SDK 的异常种类以及对于异常的处理。
升级版 SDK 将异常的种类进行了一定的细分,主要细分为以下几个 Exception:
ValidateException: 该异常会在用户没有填写 OpenAPI 必填参数或是填写的参数类型不匹配的情况下抛出,可通过查看异常的 message 来定位错误信息。
TeaUnretryableException:该异常主要是因为网络问题造成,一般是网络问题造成达到最大重试次数后抛出,可以通过
exception.getLastRequest
来查询错误发生时的请求信息。TeaException: 在 SDK 的请求中主要以业务报错为主的异常,该异常的示例中提供了三个参数为用户排查问题提供帮助:
code: OpenAPI 业务报错的错误码。
message:OpenAPI 业务报错的错误信息,其中会包含本次请求的 RequestId。
data:OpenAPI 报错后服务端返回的详细信息。
import com.aliyun.ecs20140526.models.DescribeRegionsRequest;
import com.aliyun.tea.TeaException;
import com.aliyun.tea.TeaUnretryableException;
import com.aliyun.tea.ValidateException;
import com.aliyun.teaopenapi.models.Config;
import com.aliyun.teautil.models.RuntimeOptions;
public class Sample {
public static void main(String[] args) throws Exception {
Config config = new com.aliyun.teaopenapi.models.Config();
// 从环境变量获取RAM账号的AccessKey ID
config.setAccessKeyId(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"));
// 从环境变量获取RAM账号的AccessKey ID
config.setAccessKeySecret(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
// 地域ID
config.setRegionId("<regionId>");
com.aliyun.ecs20140526.Client client = new com.aliyun.ecs20140526.Client(config);
DescribeRegionsRequest describeRegionsRequest = new DescribeRegionsRequest();
try {
client.describeRegions(describeRegionsRequest);
} catch(ValidateException ve) {
// 打印整体的错误输出
ve.printStackTrace();
// 打印错误信息
System.out.println(ve.getMessage());
} catch(TeaUnretryableException ue) {
// 打印整体的错误输出
ue.printStackTrace();
// 打印错误信息
System.out.println(ue.getMessage());
// 打印请求记录
System.out.println(ue.getLastRequest());
} catch (TeaException e) {
// 打印整体的错误输出
e.printStackTrace();
// 打印错误码
System.out.println(e.getCode());
// 打印错误信息,错误信息中包含 RequestId
System.out.println(e.getMessage());
// 打印服务端返回的具体错误内容
System.out.println(e.getData());
}
}
}