Необязательное поле "Шаблон сопоставления шлюза 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"
        }
    }
}
Другие вопросы по тегам