AWS API Gateway映射模板:路径参数字符转整数及DynamoDB查询问题
解决API Gateway映射模板中DynamoDB时间范围查询失效问题
核心问题分析
你的映射模板存在几个关键问题导致查询失效:
- 一天的秒数计算错误:你写的
43200是12小时的秒数,一天的正确秒数是86400,这直接导致时间范围不符合预期。 - 字符串转数字处理不严谨:路径参数
epoch是字符串类型,虽然Velocity模板会尝试自动类型转换,但显式转换能避免潜在的类型错误。 - 多余的URL解码:路径参数中的数字字符串不需要
$util.urlDecode()处理,该操作可能破坏数字格式。
修正后的映射模板
#set($epochStr = $input.params('epoch')) #set($epoch = $epochStr * 1) # 显式将字符串转为数字 #set($secondInADay = 86400) # 修正为一天的正确秒数 #set($start = $epoch - $secondInADay) { "TableName":"my-table", "KeyConditionExpression":"#type_alias=:v1 AND epoch BETWEEN :startTime AND :endTime", "ExpressionAttributeValues":{ ":v1":{"S":"m"}, ":startTime":{"N":"$start"}, ":endTime":{"N":"$epoch"} }, "ExpressionAttributeNames":{"#type_alias":"my hashkey"} }
额外检查项
- 确认DynamoDB表中
epoch属性的类型是数字(N),而非字符串(S),否则范围查询无法生效。 - 确保
ExpressionAttributeNames中的#type_alias对应的实际哈希键名完全正确(注意大小写)。
内容的提问来源于stack exchange,提问作者TuanAnh
相关产品推荐
相关产品推荐

