You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过AWS API Gateway获取DynamoDB同主键的所有项并返回普通JSON?

解决DynamoDB + API Gateway的两个核心需求

没问题,我来帮你搞定这两个需求,一步步说清楚:

一、返回同一primary_key下的所有项

你之前用的是DynamoDB的GetItem操作,这个只能查询单个完整主键(分区键+排序键)对应的项。要获取同一分区键(primary_key)下的所有项,得换成Query操作,具体步骤如下:

  1. 在API Gateway的集成请求配置里,把DynamoDB的操作从GetItem改成Query(控制台操作路径:集成请求 → DynamoDB操作 → 选择Query)。
  2. 修改你的请求body mapping模板为以下内容:
{
  "TableName": "table_name",
  "KeyConditionExpression": "primary_key = :pk",
  "ExpressionAttributeValues": {
    ":pk": { "S": "series" }
  }
}

这段模板的作用是:通过KeyConditionExpression指定查询条件为“primary_key等于:pk”,再通过ExpressionAttributeValues给:pk赋值为你要匹配的分区键值(这里是series),这样就能返回所有primary_key为series的项了。

二、返回不带“S”类型标识的普通JSON(无需硬编码属性)

要实现自动转换DynamoDB的带类型数据,同时不用硬编码每个属性,我们可以在集成响应的映射模板里用VTL代码自动处理:

  1. 在API Gateway的集成响应配置里,确保Content-Type设置为application/json,并添加对应的映射模板。
  2. 把映射模板的内容替换成这段VTL代码:
#set($items = $input.path('$.Items'))
[
#foreach($item in $items)
  {
  #set($firstAttribute = true)
  #foreach($attributeName in $item.keySet())
    #if(!$firstAttribute),#end
    "$attributeName": $util.dynamodb.toJson($item.get($attributeName))
    #set($firstAttribute = false)
  #end
  }#if($foreach.hasNext),#end
#end
]

这段代码的逻辑:

  • 先提取DynamoDB返回的所有项集合;
  • 遍历每个项,再遍历项内的所有属性;
  • 用$util.dynamodb.toJson()方法自动把DynamoDB的带类型值(比如{"S":"Types Of Brokers"})转换成普通JSON值(比如"Types Of Brokers");
  • 全程不用硬编码任何属性名,以后表新增字段也能自动适配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:10:31