DynamoDB SerializationException
TL;DR — O DynamoDB não conseguiu desserializar o corpo da requisição contra seu formato de fio. Quase sempre uma incompatibilidade de wrapper de tipo: um número enviado dentro de um wrapper de string {"S": …} (ou vice-versa), um valor que não está envolvido em um AttributeValue tipado, ou uma forma de baixo nível {S,N,BOOL,…} que não corresponde ao valor real. Corrija o envolvimento de tipo — ou use o Document Client para que seja feito por você.
O que significa
SerializationException: NUMBER_VALUE cannot be converted to String
SerializationException: Start of structure or map found where not expectedAo contrário de um ValidationException (que é levantado depois que a requisição faz parse), um SerializationException significa que o DynamoDB falhou ao ler o próprio corpo da requisição — a estrutura JSON ou um AttributeValue tipado não desserializou no tipo que o DynamoDB esperava. Como outros erros de cliente, ele volta com um status da classe HTTP 400, e é não retentável — reenviar o mesmo corpo o reproduz.
Por que isso acontece
- Número enviado como wrapper de string — você colocou um valor numérico sob
{"S": "123"}onde o atributo ou chave é definido como número (N), ou o inverso. A mensagem clássica éNUMBER_VALUE cannot be converted to String. - Faltar o wrapper tipado — com o
DynamoDBClientde baixo nível você passou um{pk: "USER#1"}cru em vez de{pk: {S: "USER#1"}}. A API de baixo nível exige que todo valor seja umAttributeValuetipado. - Tipo errado em uma chave — o wrapper
{S}/{N}do atributo de chave não corresponde ao tipo de chave declarado da tabela. - Uma requisição construída à mão (ou um proxy / Lambda que remodela o corpo) que emite JSON de AttributeValue malformado.
- Confusão de biblioteca de marshalling — alimentar DynamoDB JSON já feito marshal a um cliente que faz marshal novamente (envolvimento duplo).
Como corrigir
- Use o Document Client (
@aws-sdk/lib-dynamodb, ou oresource('dynamodb')do boto3). Ele faz marshal de valores nativos para AttributeValues tipados por você, o que remove toda a classe de erros de wrapper. - Se você precisa usar o cliente de baixo nível, envolva todo valor —
{S: "…"}para strings,{N: "123"}para números (nota:Né sempre uma string no fio),{BOOL: true},{L: […]},{M: {…}}. - Combine os tipos de chave com o schema — uma chave definida como
Nprecisa ser enviada como{N: "…"}, nunca{S: …}. - Não faça marshal duplo — passe objetos nativos ao Document Client, ou AttributeValues já tipados ao cliente de baixo nível, nunca uma mistura.
Construindo sobre o Document Client e nunca tocando AttributeValues crus novamente? O editor de itens do DynoTable mostra o valor tipado ao lado de cada atributo — seu modo DynamoDB-JSON revela a forma exata de fio — para que um número ou string mal tipado seja óbvio num relance.
FAQ
O que causa um SerializationException no DynamoDB?
O corpo da requisição não desserializou contra o formato de fio do DynamoDB — quase sempre uma incompatibilidade de wrapper de tipo, como um número enviado dentro de um wrapper de string ({"S"}), ou um valor cru passado ao cliente de baixo nível onde um AttributeValue tipado ({S}/{N}/…) era obrigatório.
Como o SerializationException difere do ValidationException? Um SerializationException acontece enquanto o DynamoDB está fazendo parse do corpo da requisição, antes de validar o significado da requisição. Um ValidationException acontece após o parse, quando a requisição bem formada quebra uma regra (expressão ruim, incompatibilidade de chave, limite de tamanho).
Erros relacionados
- The provided key element does not match the schema — uma incompatibilidade de tipo de chave capturada na validação.
- ValidationException (overview)
- Aprenda: DynamoDB data types · JSON marshalling
Referências
- Error handling with DynamoDB — Amazon DynamoDB Developer Guide
- AttributeValue — Amazon DynamoDB API Reference
- Supported data types and naming rules in Amazon DynamoDB — Amazon DynamoDB Developer Guide
Verificado pela última vez em 2026-07-13 contra a documentação oficial da AWS vinculada acima.