You need to enable JavaScript to run this app. 使用AWS Java SDK通过AppSync查询DynamoDB表数据的实现问题
优惠活动
大模型
产品
解决方案
定价
更多

使用AWS Java SDK通过AppSync查询DynamoDB表数据的实现问题

完整查询逻辑实现步骤

1. 确认Maven编译配置包含生成的Resolver类

首先需要将target目录下自动生成的GraphQL相关类加入项目编译路径,避免无法引用生成的Resolver、请求、响应类,修改pom.xml配置如下:

<build>
  <plugins>
    <!-- 原有其他插件 -->
    <plugin>
      <groupId>org.codehaus.mojo</groupId>
      <artifactId>build-helper-maven-plugin</artifactId>
      <version>3.3.0</version>
      <executions>
        <execution>
          <phase>generate-sources</phase>
          <goals>
            <goal>add-source</goal>
          </goals>
          <configuration>
            <sources>
              <!-- 替换为你项目中实际生成Resolver的target子目录 -->
              <source>${project.build.directory}/generated-sources/graphql</source>
            </sources>
          </configuration>
        </execution>
      </executions>
    </plugin>
  </plugins>
</build>

配置完成后执行mvn compile,即可正常导入生成的类。

2. 构造GraphQL查询请求

以查询用户表的getUser接口为例,直接使用生成的类构造请求即可:

// 导入自动生成的查询类、入参类
import com.yourbusiness.generated.queries.GetUser;
import com.yourbusiness.generated.types.GetUserInput;

// 构造查询入参
GetUserInput queryInput = GetUserInput.builder()
    .userId("u_001") // 替换为实际查询条件
    .build();

// 组装GraphQL查询对象
GetUser getUserQuery = GetUser.builder()
    .input(queryInput)
    .build();

3. 执行请求并处理响应

调用已初始化的awsAppSyncClient执行查询,以下是同步调用的示例代码:

try {
    // 发送查询请求并获取响应数据
    GetUser.Data responseData = awsAppSyncClient.execute(getUserQuery).data();
    
    if (responseData != null) {
        // 提取返回的业务数据
        GetUser.User userInfo = responseData.getUser();
        // 此处编写你的业务逻辑处理返回结果
        System.out.println("查询到用户:" + userInfo.getUserName());
    }
} catch (AWSAppSyncClientException e) {
    // 处理客户端异常:参数错误、鉴权失败、网络不通等
    e.printStackTrace();
} catch (AWSAppSyncServiceException e) {
    // 处理服务端异常:Resolver执行错误、DynamoDB操作失败等
    e.printStackTrace();
}

如果需要异步调用,替换为awsAppSyncClient.executeAsync(getUserQuery)方法即可,返回值为CompletableFuture类型。

4. 可选:手动构造查询请求

如果需要动态拼接查询语句,也可以不使用生成类,手动构造请求:

// 手写GraphQL查询语句
String queryStr = "query GetUser($input: GetUserInput!) { getUser(input: $input) { userId userName email } }";

// 组装动态变量
Map<String, Object> variables = new HashMap<>();
Map<String, Object> inputMap = new HashMap<>();
inputMap.put("userId", "u_001");
variables.put("input", inputMap);

// 构造请求
AppSyncRequest request = AppSyncRequest.builder()
    .query(queryStr)
    .variables(variables)
    .build();

// 执行请求后自行序列化返回结果
AppSyncResponse response = awsAppSyncClient.execute(request);
String responseJson = response.content().asString();
// 此处可使用Jackson等工具将json转为自定义实体类

常见注意事项

  • 确保你使用的credentialsProvider对应的IAM身份,权限策略中包含appsync:GraphQL操作权限,资源范围要覆盖你调用的AppSync API路径
  • 如果查询返回空值,优先检查AppSync Resolver的映射模板是否正确,以及AppSync的服务角色是否拥有DynamoDB表的读写权限
  • 自动生成类的包名可在AppSync Maven插件配置中自定义,避免和现有业务类包名冲突

内容的提问来源于stack exchange,提问作者Manushi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.12 17:24:01