Supplied AttributeValue is empty, must contain exactly one of the supported datatypes
TL;DR — Item'ınızdaki (ya da anahtardaki) özniteliklerden birinde içinde değer olmayan bir AttributeValue var — boş bir küme, bir anahtar özniteliğinde boş bir string/ikili, bir null/undefined alan ya da S/N/BOOL/… üyesi olmayan bir sarmalayıcı. DynamoDB, her AttributeValue'nun tam olarak bir desteklenen tür tutmasını gerektirir. Boş özniteliği kaldırın ya da ona gerçek bir değer verin.
Ne anlama gelir
ValidationException: Supplied AttributeValue is empty, must contain exactly one of the supported datatypesDynamoDB, bir öğenin şeklini doğrularken isteği reddetti: bir AttributeValue mevcuttu ama DynamoDB'nin saklayabileceği hiçbir şey taşımıyordu. Her AttributeValue tam olarak bir türlü değer (S, N, B, SS, NS, BS, M, L, NULL veya BOOL) içermelidir. Bu, özniteliği düzeltene kadar yeniden denenebilir olmayan bir HTTP 400'dür — aynı öğe yine başarısız olur.
Bu, ExpressionAttributeValues contains invalid value'ten farklıdır: o, bir ifadedeki bir :placeholder ile ilgilidir; bu, öğe gövdesinin kendisindeki bir öznitelikle ilgilidir (PutItem, BatchWriteItem, TransactWriteItems).
Neden olur
- Yazdığınız nesnede bir
undefined/nullalan — marshalcı onu atlamak ya daNULLtürlemek yerine boş bir AttributeValue yayar. - Boş bir Küme —
SS,NSveyaBSen az bir üyeye sahip olmalıdır. Boş bir küme her yerde geçersizdir. - Bir anahtar özniteliğinde boş bir string — anahtar olmayan string öznitelikleri
""olabilir ama bir tablo ya da indeks anahtarı özniteliği olamaz. - Bir anahtarda boş bir ikili değer — stringlerle aynı kural: boş ikili anahtar olmayan öznitelikler için (ve kümeler, listeler ve map'ler içinde) sorunsuzdur, asla bir anahtar için değil.
- Kalıcı kıldığınız bir
Mapya daListiçine gömülü yuvalanmış bir boş küme — yuvalanmış boş stringler ve ikili değerlere izin verilir; yuvalanmış boş kümelere izin verilmez.
Nasıl düzeltilir
- Yazmadan önce boş/
undefinedöznitelikleri çıkarın.Item'ı yalnızca gerçekten değeri olan alanlardan oluşturun; boş bir sarmalayıcı göndermek yerine gerisini bırakın. - Document Client için boş-değer ele alışını etkinleştirin.
@aws-sdk/lib-dynamodb'ninremoveUndefinedValues: truemarshal seçeneği,undefinedalanları düşürür, böylece kabloya hiç ulaşmazlar. (Anahtar olmayan öznitelikler için boş stringlere ve ikili değerlere DynamoDB doğrudan izin verir.) - Asla boş bir Küme göndermeyin — kümenin üyesi olmadığında özniteliği tamamen atlayın ya da bir
NULLsaklayın. - Anahtar özniteliklerine gerçek değerler verin — bir bölüm/sıralama anahtarı (tablo ya da indeks) asla boş bir string ya da boş bir ikili olamaz.
- Sorunlu öznitelik üst seviyede değilse başıboş boş kümeler için yuvalanmış Map'leri/Listeleri dolaşın.
SSS
DynamoDB'de "Supplied AttributeValue is empty" ne anlama gelir? Öğenizdeki bir öznitelikte, saklanan değer içermeyen bir AttributeValue var — bir anahtar özniteliğinde boş bir string ya da ikili, boş bir Küme ya da bir null/undefined alan. Her AttributeValue tam olarak bir desteklenen veri türü içermelidir, dolayısıyla DynamoDB yazmayı reddeder.
DynamoDB'nin boş değerleri reddetmesini nasıl durdururum? Yazmadan önce boş ve tanımsız öznitelikleri kaldırın (ya da Document Client'ın removeUndefinedValues seçeneğini kullanın). Asla boş bir Küme göndermeyin — özniteliği atlayın ya da bir NULL saklayın. Anahtar öznitelikleri her zaman gerçek, boş olmayan bir değer taşımalıdır.
İlgili hatalar
- ExpressionAttributeValues contains invalid value — bir ifade yer tutucusundaki aynı sorun sınıfı.
- ValidationException (genel bakış)
- Öğrenin: DynamoDB data types · JSON marshalling
Kaynaklar
- Supported data types and naming rules in Amazon DynamoDB — Amazon DynamoDB Developer Guide
- AttributeValue — Amazon DynamoDB API Reference
- Error handling with DynamoDB — Amazon DynamoDB Developer Guide
En son 2026-07-13 tarihinde yukarıda bağlantısı verilen resmi AWS belgelerine karşı doğrulandı.