DynamoDB GetItem en Java (AWS SDK v2)
GetItem lit un seul élément par sa clé primaire complète. Dans l'AWS SDK for Java 2.x tu construis un GetItemRequest et appelles getItem sur un DynamoDbClient ; chaque valeur de clé est un AttributeValue construit avec le builder typé (.s(...) pour les chaînes, .n(...) pour les nombres).
Code
import java.util.HashMap;
import java.util.Map;
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.dynamodb.DynamoDbClient;
import software.amazon.awssdk.services.dynamodb.model.AttributeValue;
import software.amazon.awssdk.services.dynamodb.model.DynamoDbException;
import software.amazon.awssdk.services.dynamodb.model.GetItemRequest;
public class GetItemExample {
public static void main(String[] args) {
try (DynamoDbClient ddb = DynamoDbClient.builder()
.region(Region.US_EAST_1)
.build()) {
Map<String, AttributeValue> key = new HashMap<>();
key.put("Artist", AttributeValue.builder().s("Arturo Sandoval").build());
key.put("SongTitle", AttributeValue.builder().s("Cubano Chant").build());
Map<String, String> names = new HashMap<>();
names.put("#proj0", "Artist");
names.put("#proj1", "SongTitle");
names.put("#proj2", "AlbumTitle");
names.put("#proj3", "Year");
GetItemRequest request = GetItemRequest.builder()
.tableName("Music")
.key(key)
.projectionExpression("#proj0, #proj1, #proj2, #proj3")
.expressionAttributeNames(names)
.build();
Map<String, AttributeValue> item = ddb.getItem(request).item();
if (item.isEmpty()) {
System.out.println("Item not found");
} else {
System.out.println(item);
}
} catch (DynamoDbException e) {
System.err.println(e.getMessage());
}
}
}Tu préfères des objets Java simples aux cartes AttributeValue ? Le DynamoDB Enhanced Client (software.amazon.awssdk.enhanced.dynamodb) mappe les éléments vers des classes bean annotées par-dessus les mêmes appels bas niveau.
Explication
tableName— la table à lire.key— doit inclure chaque attribut de clé primaire : la clé de partition seule pour une clé simple, ou la clé de partition et la clé de tri pour une clé composite.GetItemn'accepte pas de clé partielle.projectionExpression— optionnel ; limite quels attributs sont renvoyés (économise de la bande passante, pas du coût de lecture). Chaque attribut projeté est aliasé (#proj0…#proj3) viaexpressionAttributeNames, ce qui met à l'abri les mots réservés commeYear.item()— quand aucun élément ne correspond, la réponse porte une carte vide (jamaisnull) ; vérifieisEmpty()avant de l'utiliser.- Par défaut les lectures sont à terme. Ajoute
.consistentRead(true)pour une lecture fortement cohérente (coûte 2× le RCU, table de base uniquement). - Le client est
AutoCloseable— le bloc try-with-resources libère ses connexions HTTP.
À faire visuellement
Tu construis la projection ou une lecture conditionnelle à la main ? Utilise le DynamoDB Expression Builder gratuit pour assembler l'expression et copier les valeurs exactes ProjectionExpression / ExpressionAttributeNames.
Pour parcourir les tables et exécuter GetItem dans une interface graphique — formulaire de clé, grille de résultats, copie en un clic du code généré — télécharge DynoTable.
Exemples liés
- DynamoDB GetItem en Go — la même lecture avec l'AWS SDK for Go v2.
- DynamoDB Query en Java — lire une partition entière au lieu d'un seul élément.
- Comment fonctionnent les clés de partition DynamoDB — pourquoi
GetItema besoin de la clé complète. - DynamoDB ResourceNotFoundException — la première erreur habituelle ici : mauvais nom de table ou région.
- "The provided key element does not match the schema" — la clé que tu passes ne correspond pas au schéma de clé de la table.
References
- GetItem — Amazon DynamoDB API Reference
- Use GetItem with an AWS SDK or CLI — Amazon DynamoDB Developer Guide
- DynamoDbClient — AWS SDK for Java 2.x API Reference
- GetItemRequest — AWS SDK for Java 2.x API Reference
- Read consistency — Amazon DynamoDB Developer Guide
Dernière vérification le 2026-07-13 par rapport à la documentation officielle AWS liée ci-dessus.