ValidationException: ExpressionAttributeValues contains invalid value
TL;DR — ExpressionAttributeValues'teki bir değer boş, desteklenmeyen bir türde ya da ifadenizde kullanılan bir :placeholder hiç tanımlanmadı. Her :value'nin var olduğunu ve boş olmadığını kontrol edin.
Ne anlama gelir
Yaygın mesajlar:
ValidationException: ExpressionAttributeValues contains invalid value: One or more parameter values were invalid: An AttributeValue may not contain an empty string for key :s
ValidationException: Value provided in ExpressionAttributeValues unused in expressions: keys: {:x}
ValidationException: An expression attribute value used in expression is not defined; attribute value: :vNeden olur
- Boş string / boş ikili — tarihsel olarak DynamoDB
""'yi reddederdi. Boş stringlere artık anahtar olmayan öznitelikler için izin veriliyor (ve boş Listeler/Map'ler sorunsuzdur), ancak anahtar özniteliklerdeki boş değerler ve boş Kümeler hâlâ geçersizdir. - Tanımsız yer tutucu — ifadeniz
:v'ye başvuruyor amaExpressionAttributeValues'te:vyok. - Kullanılmayan yer tutucu —
:xtanımladınız ama hiçbir ifade onu kullanmıyor (DynamoDB tüm isteği reddeder). - Yanlış tür — çıplak bir JS nesnesi/
undefined/NaNya da (düşük seviyeli istemciyle) yanlış{S}/{N}sarmalayıcısı geçirmek. - Bir
ADD/DELETEişlemine geçirilen boş bir küme — o cümleler küme (ya daADDiçin sayı) işlenenleri alır ve bir küme asla boş olamaz.
Nasıl düzeltilir
- İfadedeki her
:value,ExpressionAttributeValues'te tanımlanmalıdır ve tanımlanan her değer kullanılmalıdır — ikisini tam olarak eşzamanlı tutun. - Boş/
undefined'a karşı koruyun. Kaynakundefinedolduğunda:vgeçirmeyin; bunun yerine cümleyi bırakın. Kümeler için en az bir üye olduğundan emin olun. - Yerel JS değerlerinin senin için marshal edilmesi için Document Client'ı (
@aws-sdk/lib-dynamodb) kullanın — çoğu tür sarmalayıcı hatasını kaldırır.
Örnek
import {DynamoDBClient} from '@aws-sdk/client-dynamodb';
import {DynamoDBDocumentClient, UpdateCommand} from '@aws-sdk/lib-dynamodb';
const doc = DynamoDBDocumentClient.from(new DynamoDBClient({}));
const email = getEmail(); // could be undefined
const names = {'#e': 'email'};
const values = {':e': email};
if (email == null) throw new Error('email required'); // don't send :e = undefined
await doc.send(
new UpdateCommand({
TableName: 'Users',
Key: {pk: 'USER#1'},
UpdateExpression: 'SET #e = :e',
ExpressionAttributeNames: names,
ExpressionAttributeValues: values
})
);DynoTable yolu
DynoTable'un güncelleme düzenleyicisi sen yazarken değerleri bağlar ve istek makinenizden ayrılmadan önce boş yer tutucuları reddeder. Öğeyi ⌘K ile açın, bir alanı düzenleyin ve oluşturulan ExpressionAttributeValues haritasını istek önizlemesinde inceleyin; uyumsuzluklar CloudWatch'ta 400 yerine hemen görünür.
Satır içi çalıştıramayacağınız SDK kodu için ifadeyi Expression Builder'ye yapıştırın ve :value haritasını kendi haritanızla karşılaştırın. Hatayı oluşturan aynı tabloyu test etmek için profilleri ⌘P ile değiştirin; Ayarlar → Profiller'deki Bağlantıyı Test Et, kimlik bilgilerini ve bölgeyi doğrular. Kurulum: Connect to AWS, Install. Boş kümeler ve tanımlanmamış JS değerleri en yaygın nedenlerdir; çağrı işleminizden ayrılmadan önce her ikisini de koruyun.
Kaynaklar
- PutItem — Amazon DynamoDB API Reference (2026-07-13 tarihinde doğrulandı)
- Constraints in Amazon DynamoDB (2026-07-13 tarihinde doğrulandı)
İlgili hatalar
- Geçersiz UpdateExpression sözdizimi
- ValidationException (genel bakış)
- Öğrenin: Expression names & values
Kaynaklar
- PutItem — Amazon DynamoDB API Reference
- Constraints in Amazon DynamoDB — Amazon DynamoDB Developer Guide
- Using update expressions in DynamoDB — Amazon DynamoDB Developer Guide
En son 2026-07-13 tarihinde yukarıda bağlantısı verilen resmi AWS belgelerine karşı doğrulandı.