DynamoDB — The expression can not be empty
In breve — Hai passato un parametro di espressione (FilterExpression, KeyConditionExpression, ProjectionExpression, UpdateExpression, o ConditionExpression) come stringa vuota "". DynamoDB richiede che i parametri di espressione siano o un'espressione valida non vuota o del tutto assenti — una stringa vuota non è valida. Includi il parametro solo quando hai effettivamente un'espressione; altrimenti ometti la chiave.
Cosa significa
ValidationException: Invalid FilterExpression: The expression can not be empty;
ValidationException: Invalid KeyConditionExpression: The expression can not be empty;DynamoDB tratta una stringa vuota in modo diverso da un parametro omesso. Omettere FilterExpression significa "nessun filtro"; passare FilterExpression: "" significa "ecco un filtro" — e poi non c'è nulla da analizzare, quindi la validazione fallisce. Lo stesso vale per ogni parametro di espressione.
Perché accade
- Parametri costruiti condizionalmente sempre impostati — il codice allega sempre
FilterExpressionall'oggetto richiesta, poi lo lascia""quando nessun filtro è stato scelto. - Un helper/ORM/connector che emette una stringa di espressione vuota invece di rimuovere la chiave quando la lista dei filtri è vuota.
- Concatenazione di stringhe che non ha prodotto nulla — unire un array vuoto di condizioni produce
"". - Contenuto rimosso — i placeholder sono stati eliminati, lasciando un'espressione vuota.
Come correggerlo
- Imposta il parametro solo quando è non vuoto. Costruisci l'oggetto params condizionalmente:
if (filter) params.FilterExpression = filter;— non assegnare mai"". - Elimina le chiavi vuote prima della chiamata — rimuovi dalla richiesta qualsiasi proprietà di espressione il cui valore è una stringa vuota/di soli spazi.
- Proteggi il tuo builder — se la lista delle condizioni è vuota, non allegare affatto l'espressione.
- Ricorda che sono indipendenti — anche
ExpressionAttributeNames/Valuesdovrebbero essere omessi (non{}referenziato da nulla) quando non c'è alcuna espressione che li usa. - Per una lettura dell'intera tabella, uno
ScansenzaFilterExpressionè corretto — ometti il parametro invece di passarne uno vuoto.
Stai prototipando query prima di collegarle nel codice? Eseguile nell'app desktop DynoTable — invia solo i parametri di espressione che effettivamente compili, così non spedirai un filtro a stringa vuota.
Errori correlati
- Query key condition not supported — un
KeyConditionExpressionmalformato (non vuoto). - Invalid UpdateExpression syntax — un'espressione di aggiornamento non vuota ma malformata.
- Impara: Filtering strategies · Key condition expressions
References
- Using expressions in DynamoDB — Amazon DynamoDB Developer Guide
- Query — Amazon DynamoDB API Reference
- Scan — Amazon DynamoDB API Reference
- Error handling with DynamoDB — Amazon DynamoDB Developer Guide
Ultima verifica 2026-07-13 rispetto alla documentazione ufficiale AWS collegata sopra.