如何移除AWS API Gateway响应的JSON Schema并转换DynamoDB返回格式?
使用API Gateway集成响应处理DynamoDB代理的响应格式与Schema移除
核心结论
完全可以通过API Gateway的集成请求/响应配置搞定这两个需求——既把DynamoDB原生带类型标识的JSON转成扁平化格式,又移除响应里的JSON Schema。下面是具体操作步骤:
一、转换DynamoDB响应为扁平化格式
DynamoDB返回的是带类型标记(比如S代表字符串、N代表数字)的AttributeValue格式,我们需要用集成请求的映射模板来做转换:
- 打开API Gateway控制台,找到代理DynamoDB的目标API方法(比如GET方法),切换到「集成请求」标签
- 滚动到「映射模板」区域,选择请求内容类型为
application/json(如果没有这个选项,点击「添加映射模板」新增) - 替换默认模板代码为以下VTL(Velocity Template Language)脚本,它会自动处理字符串、数字类型的扁平化,遍历所有Items完成转换:
#set($inputRoot = $input.path('$')) { "Count": $inputRoot.Count, "Items": [ #foreach($item in $inputRoot.Items) { #foreach($key in $item.keySet()) #set($value = $item.get($key)) "$key": #if($value.S) "$value.S"#{if($foreach.hasNext)},#{end} #elseif($value.N) $value.N#{if($foreach.hasNext)},#{end} #else #* 可根据需求扩展其他类型:BOOL/列表L/映射M等 *# null#{if($foreach.hasNext)},#{end} #end #end }#{if($foreach.hasNext)},#{end} #end ] } - 保存模板,这样DynamoDB的原生响应就会被转换成你想要的简洁格式
二、移除响应中的JSON Schema
这个操作需要在「集成响应」里配置:
- 切换到对应方法的「集成响应」标签
- 找到要修改的状态码(比如默认的200 OK),展开它的设置项
- 在「响应模型」下拉菜单中选择
Empty(如果没有这个选项,可以先去API Gateway的「模型」页面创建一个空模型,或者直接选择不绑定任何模型) - 确认「响应头」里没有强制返回Schema的配置,这样API Gateway就不会在响应中附加JSON Schema了
测试验证
完成上述配置后,回到API Gateway的测试控制台重新发送请求,就能看到符合要求的响应:扁平化的Items结构,没有多余的类型标记,也没有JSON Schema。如果你的数据还有其他类型(比如布尔值、列表),可以在VTL模板里添加对应的判断分支来适配。
内容的提问来源于stack exchange,提问作者Balaji Kartheeswaran
相关产品推荐
相关产品推荐

