本文以在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。