API Gateway复合键查询DynamoDB遇SerializationException问题排查
问题原因与解决方案
核心问题:映射模板的JSON格式非法
你遇到的SerializationException是因为API Gateway生成的请求JSON格式不符合DynamoDB的要求——你的映射模板里错误使用了类似JavaScript对象的赋值语法(={...}),而DynamoDB需要严格遵循JSON规范的请求体。
错误模板的具体问题
原模板中ExpressionAttributeNames和ExpressionAttributeValues的写法违反JSON语法:
// 错误写法 ExpressionAttributeNames={ "#goalId": "goalId", "#cohortId": "cohortId" }, ExpressionAttributeValues={ ":goalId": { "S": "$input.params('goalid')" }, ":cohortId": { "S": "$input.params('cohortId')" } }
JSON要求键名必须用双引号包裹,键值对用冒号(:)分隔,而非等号(=)。这种语法错误会导致生成的请求体为非法JSON,DynamoDB无法解析,进而抛出序列化异常。
修正后的映射模板
将模板修改为标准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')" } } }
额外验证建议
- 确认API Gateway集成请求的内容类型设置为
application/json,避免格式解析冲突。 - 重新查看API Gateway执行日志,确认转换后的请求体是完全合法的JSON(无语法错误)。
内容的提问来源于stack exchange,提问作者Clarkie
相关产品推荐
相关产品推荐

