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

AWS API Gateway对接DynamoDB的Get请求映射模板修复求助

解决API Gateway映射模板转换DynamoDB原生格式问题

你的问题核心是没正确处理DynamoDB返回的嵌套类型结构——DynamoDB会把所有数据用类型标识(比如S字符串、N数字、M嵌套对象、L数组)包裹起来,你的模板没正确访问这些层级,导致大部分字段取不到值。

下面是完全匹配你需求的修正版映射模板,能把DynamoDB原生格式转换成你想要的原始JSON结构:

#set($inputRoot = $input.path('$'))
{
  #foreach($item in $inputRoot.Items)
    "srini": "$item.srini.S",
    "photos": {
      "page": $item.photos.M.page.N,
      "pages": "$item.photos.M.pages.S",
      "perpage": $item.photos.M.perpage.N,
      "total": "$item.photos.M.total.S",
      "photo": [
        #foreach($photo in $item.photos.M.photo.L)
        {
          "farm": $photo.M.farm.N,
          "id": "$photo.M.id.S",
          "isfamily": $photo.M.isfamily.N,
          "isfriend": $photo.M.isfriend.N,
          "ispublic": $photo.M.ispublic.N,
          "owner": "$photo.M.owner.S",
          "secret": "$photo.M.secret.S",
          "server": "$photo.M.server.S",
          "title": "$photo.M.title.S"
        }#if($foreach.hasNext),#end
        #end
      ]
    }
  #if($foreach.hasNext),#end
  #end
}

几个关键修正细节:

  • 嵌套对象访问:photos是DynamoDB的映射类型(M),必须通过$item.photos.M才能访问它的内部属性,比如你之前写的$elem.photos.pages.S要改成$item.photos.M.pages.S
  • 数组遍历逻辑:photo是列表类型(L),得遍历$item.photos.M.photo.L才能拿到每一张图片的具体数据
  • 类型值处理:数字类型(比如page、farm)不需要加引号,直接输出N对应的数值;字符串类型(比如id、title)要给S的值套上引号
  • JSON格式规范:用$foreach.hasNext来处理元素间的逗号,避免最后一个元素多出来逗号导致JSON解析错误

用这个模板后,API Gateway返回的结果就会和你提供的原始JSON结构完全一致,Web客户端可以直接使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:33:41