ValidationException: ExpressionAttributeValues contiene un valore non valido
TL;DR — Un valore in "ExpressionAttributeValues" è vuoto, ha un tipo non supportato oppure un ":placeholder" utilizzato nell'espressione non è mai stato definito. Controlla che ogni ":valore" sia presente e non vuoto.
Cosa significa
Messaggi comuni:
ValidationException: ExpressionAttributeValues contains invalid value: One or more parameter values were invalid: An AttributeValue may not contain an empty string for key :s
ValidationException: Value provided in ExpressionAttributeValues unused in expressions: keys: {:x}
ValidationException: An expression attribute value used in expression is not defined; attribute value: :vPerché succede
- Stringa vuota/binario vuoto — storicamente DynamoDB rifiutato
"". Le stringhe vuote _sono ora consentite per attributi non chiave (e elenchi/mappe vuoti vanno bene), ma i valori vuoti negli attributi chiave e i Set vuoti non sono ancora validi. - Segnaposto non definito: la tua espressione fa riferimento a
:vmaExpressionAttributeValuesnon ha:v. - Segnaposto non utilizzato: hai definito
:xma nessuna espressione lo utilizza (DynamoDB rifiuta l'intera richiesta). - Tipo sbagliato — passaggio di un oggetto JS grezzo/
undefinito/NaNo (con il client di basso livello) il wrapper{S}/{N}sbagliato. - Un insieme vuoto passato a un'operazione
ADD/DELETE— queste clausole accettano un insieme di operandi (o, perADD, un numero) e un insieme non può mai essere vuoto.
Come risolverlo
- Ogni
:valuenell'espressione deve essere definito inExpressionAttributeValuese ogni valore definito deve essere utilizzato: mantieni i due perfettamente sincronizzati. - Guardatevi da vuoti/
undefiniti. Non passate:vquando l'origine èundefinita; eliminare invece la clausola. Per i set, assicurati che ci sia almeno un membro. - Utilizza Document Client (
@aws-sdk/lib-dynamodb) in modo che i valori JS nativi vengano sottoposti a marshalling per te: rimuove la maggior parte degli errori di wrapper del tipo. - Verifica la mappa rispetto alla stringa dell'espressione. Stampa entrambi fianco a fianco prima della chiamata: ogni
:tokennell'espressione deve apparire come una chiave in "ExpressionAttributeValues" e ogni chiave nella mappa deve apparire nell'espressione. - Per client di basso livello, convalidare i tipi di collegamento. Un set vuoto
{SS: []}o un wrapper di tipo mancante su un attributo chiave continua a non funzionare anche quando il segnaposto è definito.
Esempio
import {DynamoDBClient} from '@aws-sdk/client-dynamodb';
import {DynamoDBDocumentClient, UpdateCommand} from '@aws-sdk/lib-dynamodb';
const doc = DynamoDBDocumentClient.from(new DynamoDBClient({}));
const email = getEmail(); // could be undefined
const names = {'#e': 'email'};
const values = {':e': email};
if (email == null) throw new Error('email required'); // don't send :e = undefined
await doc.send(
new UpdateCommand({
TableName: 'Users',
Key: {pk: 'USER#1'},
UpdateExpression: 'SET #e = :e',
ExpressionAttributeNames: names,
ExpressionAttributeValues: values
})
);Percorso in DynoTable
L'editor di aggiornamento di DynoTable associa i valori durante la digitazione e rifiuta i segnaposto vuoti prima che la richiesta lasci il computer. Apri l'elemento con ⌘K, modifica un campo e controlla la mappa ExpressionAttributeValues generata nell'anteprima della richiesta: le mancate corrispondenze vengono visualizzate immediatamente anziché come 400 in CloudWatch.
Per il codice SDK che non puoi eseguire in linea, incolla l'espressione nel Generatore di espressioni e confronta la sua mappa :value con la tua. Cambia profilo con ⌘P per eseguire il test rispetto alla stessa tabella che ha generato l'errore; Verifica connessione in Impostazioni → Profili conferma le credenziali e la regione. Configurazione: Connetti a AWS, Installa. Set vuoti e valori JS non definiti sono le cause più comuni: proteggili entrambi prima che la chiamata lasci il processo.
Fonti
- PutItem - Riferimento Amazon DynamoDB API (verificato il 13-07-2026)
- Vincoli in Amazon DynamoDB (verificato il 13-07-2026)
Errori correlati
- Sintassi UpdateExpression non valida
- ValidationException (panoramica)
- Impara: Nomi e valori delle espressioni
Riferimenti
- PutItem - Riferimento Amazon DynamoDB API
- Vincoli in Amazon DynamoDB — Guida per sviluppatori di Amazon DynamoDB
- Utilizzo delle espressioni di aggiornamento nella Guida per sviluppatori di Amazon DynamoDB DynamoDB
Ultima verifica il 13-07-2026 rispetto alla documentazione ufficiale del AWS collegata sopra.