通過IDE使用阿里云Java SDK
本文以在Windows操作系統上,通過IntelliJ IDEA使用阿里云SDK為例,幫助您了解如何快速使用阿里云Java SDK。
前提條件
已安裝了JDK,如果還未安裝,請參見在Windows安裝JDK。
已安裝了IntelliJ IDEA,如果還未安裝,請參見在Windows搭建Java開發環境。
使用 SDK
使用OpenAPI門戶提供的代碼示例工程
進入OpenAPI門戶的API調試頁面,選擇產品和接口。例如我們以調用云服務器ECS的DescribeInstanceTypeFamilies接口為例,可在搜索欄中填入DescribeInstanceTypeFamilies,然后點擊進入API調試頁面。
在頁面中間的參數配置頁簽,并填寫需要的參數信息。填寫時請參考右側的文檔頁簽,充分了解接口的說明和注意事項(尤其是費用相關信息),以及各參數的具體含義和使用方法。如DescribeInstanceTypeFamilies接口支持傳入兩個參數,其中RegionId為必填,您可填入cn-hangzhou(表示杭州地域);Generation非必填,您可填入ecs-5(表示系列 V 實例規格族),參數詳細取值可在右側文檔中查看。
在右側的SDK示例頁面,選擇語言,單擊下載完整工程按鈕,下載SDK完整工程至本地并解壓。
說明完整工程中包含了SDK信息以及當前OpenAPI的調用demo。
打開IntelliJ IDEA,單擊File->Open,選擇解壓后的工程文件夾,等待Maven自動安裝依賴信息。
在調用之前,需要先獲取訪問憑證AccessKey,建議使用RAM用戶的AccessKey。更多信息,請參見創建RAM用戶的AccessKey。
重要獲取RAM用戶的AccessKey之后,還需要在環境變量中設置AccessKey,具體操作步驟請參見在Linux、macOS和Windows系統配置環境變量
運行示例代碼。
雙擊打開Sample,點擊右上角運行按鈕運行。
查看運行結果。在底部控制臺按下
ctrl+f
,搜索statusCode
,如果看到"statusCode":200
表示調用成功。
在已有的項目中安裝SDK
獲取SDK
訪問SDK中心,選擇您想要使用的SDK的云產品,這里以云服務器ECS為例。SDK版本選擇 V2.0,語言選擇 Java,安裝方式以Apache Maven 為例。
引入SDK
打開IntelliJ IDEA中已創建的Maven項目,在pom.xml中新建 <dependencies></dependencies>標簽,在該標簽中復制步驟1中的Apache Maven依賴。
<dependencies> <!--ECS V2.0 SDK --> <dependency> <groupId>com.aliyun</groupId> <artifactId>ecs20140526</artifactId> <version>5.1.2</version> </dependency> </dependencies>
右鍵項目名稱,選擇Maven->Reload project,下載Maven依賴。
創建Java類。
在項目src/main/java目錄下,右鍵單擊java,選擇 New->Java Class,名稱為Sample。
初始化云產品客戶端。
重要初始化客戶端時需要使用AccessKey完成身份驗證,請提前獲取AccessKey。獲取方法請參見創建AccessKey。
獲取RAM用戶的AccessKey之后,還需要在環境變量中設置AccessKey,具體操作步驟請參見在Linux、macOS和Windows系統配置環境變量。
endpoint如何設置請參見服務接入點。
import com.aliyun.ecs20140526.Client; import com.aliyun.teaopenapi.models.Config; public class Sample { public static void main(String[] args) throws Exception { Config config = new Config() .setAccessKeyId(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID")) .setAccessKeySecret(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")); config.endpoint = "ecs-cn-hangzhou.aliyuncs.com"; Client client = new Client(config); } }
調用OpenAPI
在調用OpenAPI之前,您需要先了解OpenAPI的詳細信息,請查看API文檔。
同時在引入的云產品Maven依賴包中,云產品SDK提供了每一個OpenAPI的請求類和響應類,請求類中定義了參數及參數類型,響應類中定義了返回參數結構,避免您在調用OpenAPI時參數名拼寫錯誤。
比如調用describeInstanceTypeFamilies,它的請求類是DescribeInstanceTypeFamiliesRequest,響應類是DescribeInstanceTypeFamiliesResponse。
說明OpenAPI請求類的命名規則:OpenAPI名稱+Request
OpenAPI響應類的命名規則:OpenAPI名稱+Response
import com.aliyun.ecs20140526.Client; import com.aliyun.ecs20140526.models.DescribeInstanceTypeFamiliesRequest; import com.aliyun.ecs20140526.models.DescribeInstanceTypeFamiliesResponse; import com.aliyun.teaopenapi.models.Config; public class Sample { public static void main(String[] args) throws Exception { Config config = new Config() .setAccessKeyId(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID")) .setAccessKeySecret(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")); config.endpoint = "ecs-cn-hangzhou.aliyuncs.com"; Client client = new Client(config); DescribeInstanceTypeFamiliesRequest describeInstanceTypeFamiliesRequest = new DescribeInstanceTypeFamiliesRequest(); describeInstanceTypeFamiliesRequest.setRegionId("cn-hangzhou"); DescribeInstanceTypeFamiliesResponse describeInstanceTypeFamiliesResponse = client.describeInstanceTypeFamilies(describeInstanceTypeFamiliesRequest); } }
處理異常,阿里云SDK對異常做了統一處理。
TeaException: 在 SDK 的請求中主要以業務報錯為主的異常,該異常的示例中提供了三個參數為用戶排查問題提供幫助:
code: OpenAPI 業務報錯的錯誤碼。
message:OpenAPI 業務報錯的錯誤信息,其中會包含本次請求的 RequestId。
data:OpenAPI 報錯后服務端返回的詳細信息
import com.aliyun.ecs20140526.Client; import com.aliyun.ecs20140526.models.DescribeInstanceTypeFamiliesRequest; import com.aliyun.ecs20140526.models.DescribeInstanceTypeFamiliesResponse; import com.aliyun.tea.TeaException; import com.aliyun.teaopenapi.models.Config; public class Sample { public static void main(String[] args) { try { Config config = new Config() .setAccessKeyId(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID")) .setAccessKeySecret(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")); config.endpoint = "ecs-cn-hangzhou.aliyuncs.com"; Client client = new Client(config); DescribeInstanceTypeFamiliesRequest describeInstanceTypeFamiliesRequest = new DescribeInstanceTypeFamiliesRequest(); describeInstanceTypeFamiliesRequest.setRegionId("cn-hangzhou"); DescribeInstanceTypeFamiliesResponse describeInstanceTypeFamiliesResponse = client.describeInstanceTypeFamilies(describeInstanceTypeFamiliesRequest); } catch (TeaException teaException) { // 此處僅做打印展示,請謹慎對待異常處理,在工程項目中切勿直接忽略異常。 // 打印錯誤碼 System.out.println(teaException.getCode()); // 打印錯誤信息,錯誤信息中包含 RequestId System.out.println(teaException.getMessage()); // 打印服務端返回的具體錯誤內容 System.out.println(teaException.getData()); } catch (Exception e) { TeaException error = new TeaException(e.getMessage(), e); // 此處僅做打印展示,請謹慎對待異常處理,在工程項目中切勿直接忽略異常。 // 錯誤 message System.out.println(error.getMessage()); // 診斷地址 System.out.println(error.getData().get("Recommend")); com.aliyun.teautil.Common.assertAsString(error.message); } } }
常見問題
運行時,提示“java: 錯誤: 不支持發行版本 X”。
同時按下
Ctrl+Alt+Shift+S
,進入Project Structure窗口。選擇Modules,在右側Language Level中選擇跟您所使用JDK版本一致的版本,例如您所使用的JDK 8,Language Level選擇“8 - Lambdas, type annotations etc. ”。單擊Apply,單擊OK。運行時,提示“java: Compilation failed: internal java compiler error”。
在IntelliJ IDEA菜單欄,單擊File->Setting->Build, Execution, Deployment->Compiler->Java Compiler,Project bytecode version和Target bytecode version選擇跟您所使用JDK版本一致的版本,例如您所使用的JDK 8,這兩項選擇 8 即可。單擊Apply,單擊OK。