Amazon web services 在AWS Api网关中定义可选属性->;DynamoDB映射
我的看法如下: 以这个博客为例,我想强调通过Api网关向dynamodb表前端写入数据的内容和方式。为此,我在Api网关中定义了以下映射:Amazon web services 在AWS Api网关中定义可选属性->;DynamoDB映射,amazon-web-services,amazon-dynamodb,aws-api-gateway,Amazon Web Services,Amazon Dynamodb,Aws Api Gateway,我的看法如下: 以这个博客为例,我想强调通过Api网关向dynamodb表前端写入数据的内容和方式。为此,我在Api网关中定义了以下映射: { "TableName": "Comments", "Item": { "commentId": { "S": "$context.requestId" }, "pageId": { "S": "$input.path('$.pageId')" },
{
"TableName": "Comments",
"Item": {
"commentId": {
"S": "$context.requestId"
},
"pageId": {
"S": "$input.path('$.pageId')"
},
"userName": {
"S": "$input.path('$.userName')"
},
"message": {
"S": "$input.path('$.message')"
}
}
}
接下来,使用以下示例进行测试效果很好:
{
"pageId": "breaking-news-story-01-18-2016",
"userName": "Just Saying Thank You",
"message": "I really enjoyed this story!!"
}
但是,假设我希望保持与上面相同的映射,但希望将消息
设置为可选。我该怎么做?我不能让它工作。我试过:
消息
-属性。-->“一个或多个参数值无效:AttributeValue不能包含空字符串”
2按原样使用上述映射,但发送带有message=null的正文-->“一个或多个参数值无效:AttributeValue不能包含空字符串”
mapping
->的定义来更改上述映射,现在在不传递消息的情况下传递一个body,显然会成功。但是,发送带有消息的正文
并不能传递消息
(这是我所期望的,但希望用尽所有选项)
显然,我可以使用AWS lambda来进行映射,但这感觉像是一个常见的用例,即:可选属性,这必须可以直接在Api网关中实现。您介意尝试此映射模板吗?如果消息为空,则不会将其添加到正文中
{
"TableName": "Comments",
"Item": {
"commentId": {
"S": "$context.requestId"
},
"pageId": {
"S": "$input.path('$.pageId')"
},
"userName": {
"S": "$input.path('$.userName')"
}#if ($.message),
"message": {
"S": "$input.path('$.message')"
}
#end
}
}
谢谢,
-Ka Hou由@Ka提供:
解释:APi网关使用空字符串或其他内容自动填充不存在的属性。这需要从if中排除
还要注意if语句后面的关键,
{
"TableName": "Comments",
"Item": {
"commentId": {
"S": "$context.requestId"
},
"pageId": {
"S": "$input.path('$.pageId')"
},
"userName": {
"S": "$input.path('$.userName')"
}#if($input.path('$.description') && $input.path('$.message') != ""),
"message": {
"S": "$input.path('$.message')"
}
#end
}
}
遗憾的是,这不起作用:
由于配置错误而执行失败:无法转换请求
使其工作。谢谢你给我指明了正确的方向。看到我的答案了吗