ValidationException: ExpressionAttributeValues contains invalid value
TL;DR — Sebuah nilai dalam ExpressionAttributeValues kosong, memiliki tipe yang tidak didukung, atau :placeholder yang digunakan dalam expression Anda tidak pernah didefinisikan. Periksa setiap :value hadir dan tidak kosong.
Apa artinya
Pesan umum:
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: :vMengapa itu terjadi
- String kosong / binary kosong — secara historis DynamoDB menolak
"". String kosong sekarang diizinkan untuk atribut non-kunci (dan List/Map kosong baik-baik saja), tetapi nilai kosong pada atribut kunci dan Set kosong masih tidak valid. - Placeholder tidak terdefinisi — expression Anda merujuk
:vtetapiExpressionAttributeValuestidak punya:v. - Placeholder tidak digunakan — Anda mendefinisikan
:xtetapi tidak ada expression yang menggunakannya (DynamoDB menolak seluruh permintaan). - Tipe salah — meneruskan objek JS mentah/
undefined/NaN, atau (dengan klien low-level) pembungkus{S}/{N}yang salah. - Set kosong diteruskan ke operasi
ADD/DELETE— klausa itu mengambil operand set (atau, untukADD, number), dan set tidak pernah bisa kosong.
Bagaimana cara memperbaikinya
- Setiap
:valuedalam expression harus didefinisikan diExpressionAttributeValues, dan setiap nilai yang didefinisikan harus digunakan — jaga keduanya selaras persis. - Jaga terhadap kosong/
undefined. Jangan teruskan:vketika sumbernyaundefined; hapus klausa sebagai gantinya. Untuk set, pastikan setidaknya satu anggota. - Gunakan Document Client (
@aws-sdk/lib-dynamodb) agar nilai JS native di-marshal untuk Anda — ini menghapus sebagian besar kesalahan pembungkus tipe.
Contoh
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
})
);Jalur di DynoTable
Editor update DynoTable mengikat nilai sambil Anda mengetik dan menolak placeholder kosong sebelum permintaan meninggalkan mesin Anda. Buka item dengan ⌘K, sunting sebuah field, dan periksa map ExpressionAttributeValues yang dihasilkan di pratinjau permintaan — ketidakcocokan langsung terlihat, bukan muncul sebagai 400 di CloudWatch.
Untuk kode SDK yang tidak bisa Anda jalankan inline, tempel ekspresinya ke Expression Builder lalu bandingkan map :value-nya dengan milik Anda. Ganti profil dengan ⌘P untuk menguji pada tabel yang sama dengan yang melempar kesalahan; Test Connection di Pengaturan → Profil memastikan kredensial dan region. Penyiapan: Menghubungkan ke AWS, Instal. Set kosong dan nilai JS undefined adalah penyebab paling umum — jaga keduanya sebelum panggilan meninggalkan proses Anda.
Sumber
- PutItem — Amazon DynamoDB API Reference (diverifikasi 13-07-2026)
- Constraints in Amazon DynamoDB (diverifikasi 13-07-2026)
Kesalahan terkait
- Sintaks UpdateExpression tidak valid
- ValidationException (ikhtisar)
- Pelajari: Expression names & values
Referensi
- PutItem — Amazon DynamoDB API Reference
- Constraints in Amazon DynamoDB — Amazon DynamoDB Developer Guide
- Using update expressions in DynamoDB — Amazon DynamoDB Developer Guide
Terakhir diverifikasi 2026-07-13 terhadap dokumentasi resmi AWS yang ditautkan di atas.