本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
的異常處理 AWS SDK for Java 2.x
了解 AWS SDK for Java 2.x 如何及何時會擲回例外狀況,對於使用開發套件建置高品質應用程式至關重要。以下章節說明開發套件會擲回的不同例外狀況案例,以及如何正確處理這些狀況。
為什麼不檢查異常?
AWS SDK for Java 使用執行時間 (或未檢查) 例外狀況而非已檢查例外狀況,原因為下:
-
為了讓開發人員能夠更精確的控制他們想處理的錯誤,而非強制他們處理不在乎的例外情況 (因而使得程式碼過於冗長)
-
為了避免大型應用程式中已檢查例外狀況的固有擴展性問題
一般而言,已檢查例外狀況在小規模上可運作良好,但會隨著應用程式增長且更複雜而變得棘手。
AwsServiceException (和子類別)
AwsServiceExceptionAwsServiceException
是比較一般的子類別SdkServiceExceptionAwsServiceException
s 表示來自的錯誤回應AWS 服務。例如,如果您嘗試終止一個不存在的Amazon EC2實例,Amazon EC2將返回一個錯誤響應,並且該錯誤響應的所有詳細信息將包含在拋出AwsServiceException
的實例中。
當您遇到時AwsServiceException
,您知道您的請求已成功發送到,AWS 服務但無法成功處理。這可能是因為請求參數中的錯誤,或因為服務端的問題。
AwsServiceException
為您提供資訊,例如:
-
傳回 HTTP 狀態碼
-
傳回AWS錯誤碼
-
來自AwsErrorDetails
類別中服務的詳細錯誤訊息 -
AWS失敗要求的要求識別碼
在大多數情況下,會擲回的服務特定子類AwsServiceException
別,以允許開發人員透過 catch 區塊精細控制處理錯誤案例。用於AwsServiceExceptionAwsServiceException
子類別的 Java SDK API 參考資料。使用子類別連結向下鑽研以查看服務所擲回的細微例外狀況。
例如,下列 SDK API 參考的連結會顯示一些常見的例外狀況階層AWS 服務。每個頁面上顯示的子類別清單會顯示程式碼可以 catch 取的特定例外狀況。
要了解有關異常的更多信息,請檢查AwsErrorDetailserrorCode
上的。您可以使用該errorCode
值查詢服務指南 API 中的資訊。例如,如果捕獲到並且AwsErrorDetails#errorCode()
值為InvalidRequest
,請使用 Amazon S3 API 參考中的錯誤代碼清單來查看更多詳細資訊。S3Exception
SdkClientException
SdkClientExceptionSdkClientException
常比一個更嚴重SdkServiceException
,並且表示阻止用戶端對服務進行服務呼叫的主要問題。AWS例如,若您嘗試對其中一個用戶端呼叫操作時沒有網路連線,AWS SDK for Java會擲回 SdkClientException
。
例外狀況和重試行為
SDK for Java 會重試數個用戶端例外RetryMode
一部分來處理。的 Java API 參考RetryMode
說明您可以設定模式的各種方式。
若要自訂觸發自動重試的例外狀況和 HTTP 狀態碼,請使用新增的執行個RetryOnStatusCodeCondition
體RetryOnExceptionsCondition
和執行個RetryPolicy
體來設定服務用戶端。