Supplied AttributeValue is empty, must contain exactly one of the supported datatypes
TL;DR — L'un des attributs de ton Item (ou de ta clé) a un AttributeValue sans aucune valeur à l'intérieur — un ensemble vide, une chaîne/un binaire vide dans un attribut de clé, un champ null/undefined, ou un wrapper sans membre S/N/BOOL/… DynamoDB exige que chaque AttributeValue contienne exactement un type pris en charge. Supprime l'attribut vide ou donne-lui une vraie valeur.
Ce que ça signifie
ValidationException: Supplied AttributeValue is empty, must contain exactly one of the supported datatypesDynamoDB a rejeté la requête en validant la forme d'un élément : un AttributeValue était présent mais ne portait rien que DynamoDB puisse stocker. Chaque AttributeValue doit contenir exactement une valeur typée (S, N, B, SS, NS, BS, M, L, NULL ou BOOL). C'est un HTTP 400, non réessayable — le même élément échoue à nouveau jusqu'à ce que tu corriges l'attribut.
C'est distinct de ExpressionAttributeValues contains invalid value : celle-là concerne un :placeholder dans une expression ; celle-ci concerne un attribut dans le corps de l'élément lui-même (PutItem, BatchWriteItem, TransactWriteItems).
Pourquoi ça arrive
- Un champ
undefined/nulldans l'objet que tu écris — le marshaller émet un AttributeValue vide au lieu de l'ignorer ou de le typer enNULL. - Un ensemble vide —
SS,NSouBSdoit avoir au moins un membre. Un ensemble vide est invalide partout. - Une chaîne vide dans un attribut de clé — les attributs de chaîne non-clé peuvent valoir
"", mais un attribut de clé de table ou d'index ne le peut pas. - Une valeur binaire vide dans une clé — même règle que les chaînes : le binaire vide convient pour les attributs non-clé (et à l'intérieur des ensembles, listes et maps), jamais pour une clé.
- Un ensemble vide imbriqué enfoui dans une
Mapou uneListque tu persistes — les chaînes et valeurs binaires vides imbriquées sont autorisées ; les ensembles vides imbriqués ne le sont pas.
Comment le corriger
- Retire les attributs vides/
undefinedavant d'écrire. Construis l'Itemuniquement à partir des champs qui ont réellement des valeurs ; supprime le reste au lieu d'envoyer un wrapper vide. - Pour le Document Client, active la gestion des valeurs vides. L'option de marshalling
removeUndefinedValues: truede@aws-sdk/lib-dynamodbsupprime les champsundefinedpour qu'ils n'atteignent jamais le fil. (Les chaînes et valeurs binaires vides pour les attributs non-clé sont autorisées directement par DynamoDB.) - N'envoie jamais un ensemble vide — omets complètement l'attribut quand l'ensemble n'a aucun membre, ou stocke un
NULL. - Donne de vraies valeurs aux attributs de clé — une clé de partition/de tri (de table ou d'index) ne peut jamais être une chaîne vide ou un binaire vide.
- Parcours les Maps/Lists imbriquées à la recherche d'ensembles vides parasites si l'attribut fautif n'est pas au niveau supérieur.
FAQ
Que signifie « Supplied AttributeValue is empty » dans DynamoDB ? Un attribut de ton élément a un AttributeValue qui ne contient aucune valeur stockée — une chaîne ou un binaire vide dans un attribut de clé, un ensemble vide, ou un champ null/undefined. Chaque AttributeValue doit contenir exactement un type de données pris en charge, donc DynamoDB rejette l'écriture.
Comment empêcher DynamoDB de rejeter les valeurs vides ? Retire les attributs vides et undefined avant d'écrire (ou utilise l'option removeUndefinedValues du Document Client). N'envoie jamais un ensemble vide — omets l'attribut ou stocke un NULL. Les attributs de clé doivent toujours porter une vraie valeur non vide.
Erreurs liées
- ExpressionAttributeValues contains invalid value — la même classe de problème dans un placeholder d'expression.
- ValidationException (overview)
- En savoir plus : DynamoDB data types · JSON marshalling
Références
- 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
Dernière vérification le 2026-07-13 par rapport à la documentation officielle AWS liée ci-dessus.