Supplied AttributeValue is empty, must contain exactly one of the supported datatypes
TL;DR — Eines der Attribute in deinem Item (oder Schlüssel) hat ein AttributeValue ohne Wert darin — ein leeres Set, einen leeren String/Binary in einem Schlüsselattribut, ein null/undefined-Feld oder einen Wrapper ohne S/N/BOOL/…-Member. DynamoDB verlangt, dass jedes AttributeValue genau einen unterstützten Typ enthält. Entferne das leere Attribut oder gib ihm einen echten Wert.
Was es bedeutet
ValidationException: Supplied AttributeValue is empty, must contain exactly one of the supported datatypesDynamoDB hat den Request beim Validieren der Form eines Items abgelehnt: Ein AttributeValue war vorhanden, trug aber nichts, was DynamoDB speichern kann. Jedes AttributeValue muss genau einen typisierten Wert enthalten (S, N, B, SS, NS, BS, M, L, NULL oder BOOL). Es ist ein HTTP 400, nicht wiederholbar — dasselbe Item scheitert erneut, bis du das Attribut korrigierst.
Das unterscheidet sich von ExpressionAttributeValues contains invalid value: Bei dem geht es um einen :platzhalter in einer Expression; bei diesem geht es um ein Attribut im Item-Body selbst (PutItem, BatchWriteItem, TransactWriteItems).
Warum es passiert
- Ein
undefined/null-Feld in dem Objekt, das du schreibst — der Marshaller gibt ein leeres AttributeValue aus, statt es zu überspringen oder alsNULLzu typisieren. - Ein leeres Set —
SS,NSoderBSmuss mindestens ein Element haben. Ein leeres Set ist überall ungültig. - Ein leerer String in einem Schlüsselattribut — Nicht-Schlüssel-String-Attribute dürfen
""sein, aber ein Tabellen- oder Index-Schlüssel-Attribut nicht. - Ein leerer Binary-Wert in einem Schlüssel — dieselbe Regel wie bei Strings: leerer Binary ist für Nicht-Schlüssel-Attribute in Ordnung (und innerhalb von Sets, Lists und Maps), nie für einen Schlüssel.
- Ein verschachteltes leeres Set, das tief in einer
MapoderListsteckt, die du persistierst — verschachtelte leere Strings und Binary-Werte sind erlaubt; verschachtelte leere Sets nicht.
So behebst du es
- Entferne leere/
undefined-Attribute vor dem Schreiben. Baue dasItemnur aus den Feldern, die tatsächlich Werte haben; lass den Rest weg, statt einen leeren Wrapper zu senden. - Aktiviere für den Document Client die Behandlung leerer Werte. Die Marshalling-Option
removeUndefinedValues: truevon@aws-sdk/lib-dynamodblässtundefined-Felder weg, sodass sie nie das Wire erreichen. (Leere Strings und Binary-Werte für Nicht-Schlüssel-Attribute sind von DynamoDB direkt erlaubt.) - Sende nie ein leeres Set — lass das Attribut ganz weg, wenn das Set keine Elemente hat, oder speichere ein
NULL. - Gib Schlüsselattributen echte Werte — ein Partition-/Sort Key (Tabelle oder Index) kann nie ein leerer String oder leerer Binary sein.
- Durchlaufe verschachtelte Maps/Lists nach verirrten leeren Sets, wenn das betreffende Attribut nicht auf oberster Ebene liegt.
FAQ
Was bedeutet "Supplied AttributeValue is empty" in DynamoDB? Ein Attribut in deinem Item hat ein AttributeValue, das keinen gespeicherten Wert enthält — einen leeren String oder Binary in einem Schlüsselattribut, ein leeres Set oder ein null/undefined-Feld. Jedes AttributeValue muss genau einen unterstützten Datentyp enthalten, also weist DynamoDB den Write zurück.
Wie verhindere ich, dass DynamoDB leere Werte ablehnt? Entferne leere und undefinierte Attribute vor dem Schreiben (oder nutze die Option removeUndefinedValues des Document Client). Sende nie ein leeres Set — lass das Attribut weg oder speichere ein NULL. Schlüsselattribute müssen immer einen echten, nicht leeren Wert tragen.
Verwandte Fehler
- ExpressionAttributeValues contains invalid value — dieselbe Problemklasse in einem Expression-Platzhalter.
- ValidationException (Überblick)
- Learn: DynamoDB-Datentypen · JSON-Marshalling
Referenzen
- 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
Zuletzt verifiziert am 2026-07-13 gegen die oben verlinkte offizielle AWS-Dokumentation.