我一直在使用AWS API Gateway上的映射模板,尤其是DynamoDB集成。而且我发现检查可选字段非常不便。例如,我有一个这样的JSON负载:
{
"optional_field": "abcd"
}
现在将其放入数据库中,我使用如下映射:
#set($hasOptionalField = $input.path('$.optional_field') != "")
{
"TableName": "A_Table",
"Item": {
"id": {"S": "$context.requestId"}
#if($hasOptionalField),
"optional_field": {"S": "$input.path('$.optional_field')"}
#end
}
}
根据Apache Velocity Reference,我应该能够使用更简单的语法来检查null,empty,false或零,并自动回退到某些替代值,例如:
{
"TableName": "A_Table",
"Item": {
"id": {"S": "$context.requestId"},
"optional_field": {"S": "${input.path('$.optional_field')|'no_data'}"}
}
}
我可以直接保留它,没有任何回退,但是如果尝试将空字符串作为属性值,DynamoDB API会给您一个错误。
API网关映射模板似乎没有100%实现Apache Velocity规范?
答案 0 :(得分:0)
您可以使用 #if-else 回退到负载中可选字段的默认值。
#set($req = $input.path('$'))
#if($req.optional_field != "")
#set( $my_default_value = $input.path('$.optional_field'))
#else
#set ($my_default_value = "no_data")
#end
{
"TableName": "A_Table",
"Item": {
"id": {
"S": "$context.requestId"
},
"optional_field": {
"S": "$my_default_value"
}
}
}