Необязательное поле "Шаблон сопоставления шлюза API"
Я работал с шаблонами отображения на 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, я должен иметь возможность использовать гораздо более простой синтаксис: проверять наличие нулевого, пустого, ложного или нулевого значения и автоматически возвращаться к некоторому альтернативному значению, что-то красивое, например:
{
"TableName": "A_Table",
"Item": {
"id": {"S": "$context.requestId"},
"optional_field": {"S": "${input.path('$.optional_field')|'no_data'}"}
}
}
Я мог бы просто оставить все как есть без какого-либо отката, но API DynamoDB выдает ошибку, если вы попытаетесь поместить пустую строку в качестве значения атрибута.
Кажется, шаблоны сопоставления API-шлюзов не на 100% реализуют спецификацию Apache Velocity?
1 ответ
Вы можете вернуться к значению по умолчанию для дополнительных полей из полезной нагрузки с помощью #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"
}
}
}