

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 處理 中的錯誤 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`代表來自 的錯誤回應 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`會擲回服務特定的 子類別，以允許開發人員精細控制透過擷取區塊處理錯誤案例。適用於 [AwsServiceException](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/awscore/exception/AwsServiceException.html) 的 Java SDK API 參考會顯示大量`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 參考中的[錯誤代碼清單](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` 通常比 更嚴重`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`服務用戶端預設使用之舊版的一部分來處理。的 Java API 參考`[RetryMode](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/core/retry/RetryMode.html)`說明您可以設定 模式的各種方式。

若要自訂觸發自動重試的例外狀況和 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)`的 來設定您的服務用戶端。