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

API Gateway调用DynamoDB触发SerializationException:非预期位置发现结构或映射起始符问题排查

问题分析与修复方案

哎,我一眼就看出你映射模板里的核心问题了——ExpressionAttributeNames的格式写错了,这和uuid是不是保留字完全没关系!

你现在的模板里,ExpressionAttributeNames把#id映射成了{"S": "uuid"},但这个字段的作用只是给表中的真实字段名起别名,不需要使用DynamoDB的AttributeValue结构(就是带S的那个对象)。DynamoDB期望这里是一个纯字符串,结果收到了一个嵌套结构,直接触发了SerializationException错误。

正确的映射模板

把ExpressionAttributeNames的部分改成纯字符串映射就行,其他部分保持不变:

{
  "TableName": "table",
  "KeyConditionExpression": "#id = :v1",
  "ExpressionAttributeNames": { "#id": "uuid" },
  "ExpressionAttributeValues": { ":v1": { "S": "$input.params('id')" } }
}

为什么这样改?

  • ExpressionAttributeNames:仅仅是字段名的别名映射,用来规避字段名和DynamoDB保留字冲突,只需要直接写真实字段名的字符串即可,不需要指定数据类型。
  • ExpressionAttributeValues:这个部分才需要用AttributeValue结构(比如{"S": "xxx"}),因为要明确传递给DynamoDB的参数类型和值,你的这部分写法是正确的。

你之前排除IAM权限的思路是对的,其他GET方法正常也说明API Gateway的基础配置没问题,就是这个模板的格式错误导致的序列化失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 20:07:37