

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 处理中的错误 AWS SDK for Java 2.x
<a name="handling-exceptions"></a>

了解 AWS SDK for Java 2.x 抛出异常的方式和时间对于使用 SDK 构建高质量的应用程序非常重要。接下来几节介绍开发工具包引发异常的几种不同情况，以及如何正确地处理这些异常。

## 为什么使用未选中的异常？
<a name="why-unchecked-exceptions"></a>

出于以下原因， 适用于 Java 的 AWS SDK 使用运行时（或未选中）异常而不是已检查的异常：
+ 使开发人员能够精细控制要处理哪些错误，而不是必须处理无关紧要的异常情况（这会导致代码极其冗长）
+ 避免大型应用程序因使用选中的异常而固有的可扩展性问题

一般来说，小型应用程序使用选中的异常是可以的，但随着应用程序的大小和复杂程度增加，这样做就会出现问题。

## AwsServiceException （和子类）
<a name="sdkserviceexception-and-subclasses"></a>

 [AwsServiceException](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/awscore/exception/AwsServiceException.html)是您在使用时遇到的最常见的异常 适用于 Java 的 AWS SDK。 `AwsServiceException`是更通[SdkServiceException](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/core/exception/SdkServiceException.html)用的子类。 `AwsServiceException`s 表示来自 a 的错误响应 AWS 服务。例如，如果您尝试终止一个不存在的 Amazon EC2 实例，则 Amazon EC2 将返回错误响应，并且该错误响应的所有详细信息都将包含在抛出的错误响应中。`AwsServiceException`

遇到时`AwsServiceException`，您就知道您的请求已成功发送到， AWS 服务 但无法成功处理。这可能是因为请求的参数中存在错误，或者是因为服务端的问题。

 `AwsServiceException` 为您提供很多信息，例如：
+ 返回的 HTTP 状态代码
+ 返回的 AWS 错误码
+ [AwsErrorDetails](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/awscore/exception/AwsErrorDetails.html)课堂上来自服务的详细错误消息
+  AWS 失败请求的请求 ID

在某些情况下，会引发 `AwsServiceException` 的一个特定于服务的子类，使开发人员能够通过捕获模块精细控制如何处理错误情况。的 Java SDK API 参考中[AwsServiceException](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/awscore/exception/AwsServiceException.html)显示了大量的`AwsServiceException`子类。使用子类链接可深入查看服务引发的细粒度异常。

例如，以下指向 SDK API 参考的链接中提供了一些常用 AWS 服务的异常层次结构。每个页面上的子类列表显示了您的代码可以捕获的特定异常。
+ [Amazon S3](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/s3/model/S3Exception.html)
+ [DynamoDB](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/dynamodb/model/DynamoDbException.html)
+ [Amazon SQS](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/sqs/model/SqsException.html)

要了解有关异常的更多信息，请检查[AwsErrorDetails](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/awscore/exception/AwsErrorDetails.html)对象`errorCode`上的。您可以使用该 `errorCode` 值在服务指南 API 中查找信息。例如，如果捕获到 `S3Exception` 且 `AwsErrorDetails#errorCode()` 的值为 `InvalidRequest`，则使用《Amazon S3 API Reference》中的 [List of error codes](https://docs.aws.amazon.com/AmazonS3/latest/API/ErrorResponses.html#ErrorCodeList) 来查看更多详细信息。

## SdkClientException
<a name="sdkclientexception"></a>

 [SdkClientException](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/core/exception/SdkClientException.html)表示 Java 客户端代码内部出现问题，无论是在尝试向发送请求时 AWS 还是尝试解析来自 AWS的响应时。`SdkClientException`通常比 a 更严重`SdkServiceException`，表示存在阻止客户端向 AWS 服务发出服务调用的主要问题。例如，当您尝试在其中一个客户端上调用操作时，`SdkClientException`如果没有可用的网络连接，则会 适用于 Java 的 AWS SDK 抛出。

## 异常和重试行为
<a name="retried-exceptions"></a>

适用于 Java 的 SDK 会重试多个[客户端异常](https://github.com/aws/aws-sdk-java-v2/blob/13985e0668a9a0b12ad331644e3c4fd1385c2cd7/core/sdk-core/src/main/java/software/amazon/awssdk/core/internal/retry/SdkDefaultRetrySetting.java#L79C41-L79C41)请求以及从响应中 AWS 服务 收到的 [HTTP 状态代码](https://github.com/aws/aws-sdk-java-v2/blob/13985e0668a9a0b12ad331644e3c4fd1385c2cd7/core/sdk-core/src/main/java/software/amazon/awssdk/core/internal/retry/SdkDefaultRetrySetting.java#L72C31-L72C31)的请求。这些错误作为服务客户端默认使用的旧版 `RetryMode` 的一部分进行处理。有关 `[RetryMode](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/core/retry/RetryMode.html)` 的 Java API 参考描述了可用于配置模式的各种方式。

要自定义触发自动重试的异常和 HTTP 状态代码，请使用添加 `[RetryOnExceptionsCondition](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/core/retry/conditions/RetryOnExceptionsCondition.html)` 和 `[RetryOnStatusCodeCondition](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/awscore/retry/conditions/RetryOnErrorCodeCondition.html)` 实例的 `[RetryPolicy](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/core/retry/RetryPolicy.html)` 来配置服务客户端。