繁体   English   中英

API 使用复合键的网关 dynamodb 查询 - SerializationException

[英]API Gateway dynamodb query using composite key - SerializationException

我正在测试使用 API 网关直接查询 Dynamodb 表,使用复合键。 我已经设置了资源 /goalcohort/{goalid} 和查询参数 cohortId。

我已将 cohortId 添加到方法执行中的 URL 查询字符串参数(不确定这是否是正确的方法。所有视频示例仅使用分区键,而不是同时使用 PK 和 SK)。

然后,我将此映射模板添加到 Post 查询集成请求中: ''' { "TableName": "cohort", "KeyConditionExpression": "#goalId =:goalId AND #cohortId =:cohortId", ExpressionAttributeNames={ "# goalId": "goalId", "#cohortId": "cohortId" }, ExpressionAttributeValues={ ":goalId": { "S": "$input.params('goalid')" }, ":cohortId": { " S": "$input.params('cohortId')" } } } '''(我知道传递的参数有错别字,是 goalid,而不是 GoalId - 因此 expressionattrbutevalue 显示 goalid(小写 i) - 我会修复一次已经解决了这个问题)。

如果我在 Dynamobd 中针对表运行查询,它会工作: 在此处输入图像描述

如果我尝试使用相同的参数运行 API 网关测试: 在此处输入图像描述

日志显示输入的参数正常:''' Sat Dec 31 19:03:32 UTC 2022:转换后的端点请求正文:{ "TableName": "cohort", "KeyConditionExpression": "#goalId =:goalId AND #cohortId =:cohortId", ExpressionAttributeNames={ "#goalId": "goalId", "#cohortId": "cohortId" }, ExpressionAttributeValues={ ":goalId": { "S": "3615fbac-1413-4cb2-9f8f-a3b745862cb0 " }, ":cohortId": { "S": "1a198952-6693-4409-b3ac-12069492eb2c" } } } 2022 年 12 月 31 日星期六 19:03:32 UTC:发送请求至https://dynamodb.us-east -2.amazonaws.com/?Action=查询'''

但是,响应正文显示:{"__type":"com.amazon.coral.service#SerializationException"}

日志:UTC 2022 年 12 月 31 日星期六 19:03:32:向https://dynamodb.us-east-2.amazonaws.com/?Action=Query UTC 2022 年 12 月 31 日星期六 19:03:32 发送请求:收到响应。 状态:400,集成延迟:6 毫秒 UTC 2022 年 12 月 31 日星期六 19:03:32:端点响应标头:{Server=Server,Date=Sat,2022 年 12 月 31 日 19:03:32 GMT,Content-Type=application/x -amz-json-1.0, Content-Length=60, Connection=keep-alive, x-amzn-RequestId=SRP9NKEU3C4KBJTQOM69TJR4QJVV4KQNSO5AEMVJF66Q9ASUAAJG, x-amz-crc32=3948637019} 周六 12 月 31 日 19:03:32 UTC 2022 之前的端点响应主体转换:{“__type”:“com.amazon.coral.service#SerializationException”} UTC 2022 年 12 月 31 日星期六 19:03:32:转换后的方法响应主体:{“__type”:“com.amazon.coral.service# SerializationException"} 2022 年 12 月 31 日星期六 19:03:32:方法响应标头:{X-Amzn-Trace-Id=Root=1-63b08784-73f59a3e1691136c5e00259f,Content-Type=application/json} 12 月 31 日星期六 19:03: 32 UTC 2022:成功完成执行 Sat Dec 31 19:03:32 UTC 2022:方法已完成,状态:200

我究竟做错了什么? 所有帮助表示赞赏。

我认为您的映射模板中存在错误,因为它不是有效的 json。请尝试使用此 json 作为您的映射模板。

{
   "TableName":"cohort",
   "KeyConditionExpression":"#goalId = :goalId AND #cohortId = :cohortId",
   "ExpressionAttributeNames":{
      "#goalId":"goalId",
      "#cohortId":"cohortId"
   },
   "ExpressionAttributeValues":{
      ":goalId":{
         "S":"$input.params('goalid')"
      },
      ":cohortId":{
         "S":"$input.params('cohortId')"
      }
   }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM