Supplied AttributeValue is empty, must contain exactly one of the supported datatypes
TL;DR — Um dos atributos no seu Item (ou chave) tem um AttributeValue com nenhum valor dentro dele — um set vazio, uma string/binário vazio em um atributo de chave, um campo null/undefined, ou um wrapper sem um membro S/N/BOOL/… O DynamoDB exige que todo AttributeValue contenha exatamente um tipo suportado. Remova o atributo vazio ou dê a ele um valor real.
O que significa
ValidationException: Supplied AttributeValue is empty, must contain exactly one of the supported datatypesO DynamoDB rejeitou a requisição enquanto validava a forma de um item: um AttributeValue estava presente mas não carregava nada que o DynamoDB possa armazenar. Todo AttributeValue precisa conter exatamente um valor tipado (S, N, B, SS, NS, BS, M, L, NULL ou BOOL). É um HTTP 400, não retentável — o mesmo item falha novamente até você corrigir o atributo.
Isto é distinto de ExpressionAttributeValues contains invalid value: aquele é sobre um :placeholder em uma expressão; este é sobre um atributo no próprio corpo do item (PutItem, BatchWriteItem, TransactWriteItems).
Por que isso acontece
- Um campo
undefined/nullno objeto que você está escrevendo — o marshaller emite um AttributeValue vazio em vez de pulá-lo ou tipá-lo comoNULL. - Um Set vazio —
SS,NSouBSprecisa ter ao menos um membro. Um set vazio é inválido em todo lugar. - Uma string vazia em um atributo de chave — atributos de string que não são chave podem ser
"", mas um atributo de chave de tabela ou índice não pode. - Um valor binário vazio em uma chave — mesma regra que strings: binário vazio é aceitável para atributos que não são chave (e dentro de sets, lists e maps), nunca para uma chave.
- Um set vazio aninhado enterrado dentro de um
MapouListque você está persistindo — strings e valores binários vazios aninhados são permitidos; sets vazios aninhados não são.
Como corrigir
- Retire atributos vazios/
undefinedantes de escrever. Construa oItemapenas com os campos que de fato têm valores; descarte o resto em vez de enviar um wrapper vazio. - Para o Document Client, habilite o tratamento de valores vazios. A opção de marshalling
removeUndefinedValues: truedo@aws-sdk/lib-dynamodbdescarta camposundefinedpara que nunca alcancem o fio. (Strings vazias e valores binários para atributos que não são chave são permitidos pelo DynamoDB diretamente.) - Nunca envie um Set vazio — omita o atributo inteiramente quando o set não tem membros, ou armazene um
NULL. - Dê valores reais a atributos de chave — uma chave de partição/ordenação (tabela ou índice) nunca pode ser uma string vazia ou binário vazio.
- Percorra Maps/Lists aninhados procurando sets vazios perdidos se o atributo problemático não é de nível superior.
FAQ
O que significa "Supplied AttributeValue is empty" no DynamoDB? Um atributo no seu item tem um AttributeValue que não contém nenhum valor armazenado — uma string ou binário vazio em um atributo de chave, um Set vazio, ou um campo null/undefined. Todo AttributeValue precisa conter exatamente um datatype suportado, então o DynamoDB rejeita a escrita.
Como impeço o DynamoDB de rejeitar valores vazios? Remova atributos vazios e indefinidos antes de escrever (ou use a opção removeUndefinedValues do Document Client). Nunca envie um Set vazio — omita o atributo ou armazene um NULL. Atributos de chave precisam sempre carregar um valor real e não vazio.
Erros relacionados
- ExpressionAttributeValues contains invalid value — a mesma classe de problema em um placeholder de expressão.
- ValidationException (overview)
- Aprenda: DynamoDB data types · JSON marshalling
Referências
- 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
Verificado pela última vez em 2026-07-13 contra a documentação oficial da AWS vinculada acima.