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 FilterExpression all'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

  1. Imposta il parametro solo quando è non vuoto. Costruisci l'oggetto params condizionalmente: if (filter) params.FilterExpression = filter; — non assegnare mai "".
  2. Elimina le chiavi vuote prima della chiamata — rimuovi dalla richiesta qualsiasi proprietà di espressione il cui valore è una stringa vuota/di soli spazi.
  3. Proteggi il tuo builder — se la lista delle condizioni è vuota, non allegare affatto l'espressione.
  4. Ricorda che sono indipendenti — anche ExpressionAttributeNames/Values dovrebbero essere omessi (non {} referenziato da nulla) quando non c'è alcuna espressione che li usa.
  5. Per una lettura dell'intera tabella, uno Scan senza FilterExpression è 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

References

Ultima verifica 2026-07-13 rispetto alla documentazione ufficiale AWS collegata sopra.

Lavora con DynamoDB senza la Console

DynoTable è un client desktop veloce per DynamoDB — sfoglia le tabelle, esegui query in stile SQL e modifica gli Item localmente.