У меня есть шлюз API, который сканирует таблицу DynamoDB. Я хочу передать LastEvaluatedKey
в моем теле запроса; если я передаю LastEvaluatedKey
, тогда все работает, и я получаю ответ с ожидаемыми данными - так что я на полпути.
Но, конечно, первый раз, когда я отправляю запрос в API LastEvaluatedKey
не будет существовать, поэтому ExclusiveStartKey
в шаблоне сопоставления, который ожидает LastEvaluatedKey
, должен быть необязательным. Я пробовал несколько разных способов сделать это необязательным, но пока ничего не получалось. Вот что у меня есть:
#set($hasName = $input.json('$.Name'))
{
"TableName": "MyTable",
#if($hasName && $hasName.length() != 0)
"ExclusiveStartKey": {
"Name": {
"S": $input.json('$.Name')
},
"Date": {
"S": $input.json('$.Date')
}
},#end
"FilterExpression": "begins_with(#dt, :tdt)",
"ExpressionAttributeNames": {
"#dt": "Date"
},
"ExpressionAttributeValues": {
":tdt": {
"S": "$input.params('date')"
}
}
}
Как я уже сказал, вышесказанное работает, когда я делаю передать LastEvaluatedKey в моем теле запроса, но когда я не получаю, я получаю ошибку:
{
"__type": "com.amazon.coral.validate#ValidationException",
"message": "The provided starting key is invalid: One or more parameter values were invalid: An AttributeValue may not contain an empty string"
}
... все еще ожидается, что LastEvaluatedKey
Я также попытался обернуть Name
и Date
внутри, если #if
, но безуспешно. Я получил вдохновение от других ответов, таких как: это и это , но не повезло.