DynamoDB GetItem in Java (AWS SDK v2)
GetItem liest ein einzelnes Item über seinen vollständigen Primärschlüssel. Im AWS SDK for Java 2.x baust du einen GetItemRequest und rufst getItem auf einem DynamoDbClient auf; jeder Schlüsselwert ist ein AttributeValue, gebaut mit dem typisierten Builder (.s(...) für Strings, .n(...) für Zahlen).
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());
}
}
}Lieber schlichte Java-Objekte statt AttributeValue-Maps? Der DynamoDB Enhanced Client (software.amazon.awssdk.enhanced.dynamodb) mappt Items auf annotierte Bean-Klassen aufbauend auf denselben Low-Level-Aufrufen.
Erklärung
tableName— die Tabelle, aus der gelesen wird.key— muss jedes Primärschlüssel-Attribut enthalten: den Partitionsschlüssel allein bei einem einfachen Schlüssel oder Partitions- und Sortierschlüssel bei einem zusammengesetzten Schlüssel.GetItemakzeptiert keinen unvollständigen Schlüssel.projectionExpression— optional; begrenzt, welche Attribute zurückkommen (spart Bandbreite, nicht Read-Kosten). Jedes projizierte Attribut wird perexpressionAttributeNamesaliasiert (#proj0…#proj3), was reservierte Wörter wieYearabsichert.item()— wenn kein Item passt, trägt die Antwort eine leere Map (niemalsnull); prüfeisEmpty(), bevor du sie verwendest.- Standardmäßig sind Reads letztendlich konsistent. Füge
.consistentRead(true)für einen stark konsistenten Read hinzu (kostet 2× die RCU, nur Basistabelle). - Der Client ist
AutoCloseable— der try-with-resources-Block gibt seine HTTP-Verbindungen frei.
Visuell erledigen
Die Projektion oder einen bedingten Read von Hand bauen? Nutze den kostenlosen DynamoDB Expression Builder, um die Expression zusammenzustellen und die exakten ProjectionExpression / ExpressionAttributeNames-Werte zu kopieren.
Um Tabellen in einer GUI zu durchsuchen und GetItem auszuführen — Schlüsselformular, Ergebnisraster, Ein-Klick-Kopie des generierten Codes — lade DynoTable herunter.
Verwandte Beispiele
- DynamoDB GetItem in Go — derselbe Read mit AWS SDK for Go v2.
- DynamoDB Query in Java — eine ganze Partition statt eines einzelnen Items lesen.
- Wie DynamoDB-Partitionsschlüssel funktionieren — warum
GetItemden vollständigen Schlüssel braucht. - DynamoDB ResourceNotFoundException — der übliche erste Fehler hier: falscher Tabellenname oder falsche Region.
- "The provided key element does not match the schema" — der übergebene Schlüssel passt nicht zum Schlüsselschema der Tabelle.
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
Zuletzt verifiziert am 2026-07-13 gegen die oben verlinkte offizielle AWS-Dokumentation.