DynamoDB GetItem en Java (AWS SDK v2)
GetItem lee un único item por su clave primaria completa. En AWS SDK para Java 2.x construyes un GetItemRequest y llamas a getItem sobre un DynamoDbClient; cada valor de clave es un AttributeValue construido con el builder tipado (.s(...) para strings, .n(...) para números).
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());
}
}
}¿Prefieres objetos Java simples en lugar de mapas de AttributeValue? El DynamoDB Enhanced Client (software.amazon.awssdk.enhanced.dynamodb) mapea los items a clases de bean anotadas por encima de las mismas llamadas de bajo nivel.
Explicación
tableName— la tabla de la que se lee.key— debe incluir cada atributo de la clave primaria: solo la clave de partición para una clave simple, o la clave de partición y la de ordenación para una clave compuesta.GetItemno acepta una clave parcial.projectionExpression— opcional; limita qué atributos se devuelven (ahorra ancho de banda, no coste de lectura). Cada atributo proyectado lleva un alias (#proj0…#proj3) medianteexpressionAttributeNames, lo que mantiene a salvo palabras reservadas comoYear.item()— cuando ningún item coincide, la respuesta lleva un mapa vacío (nuncanull); compruebaisEmpty()antes de usarlo.- Por defecto las lecturas son con consistencia eventual. Añade
.consistentRead(true)para una lectura con consistencia fuerte (cuesta 2× la RCU, solo en la tabla base). - El cliente es
AutoCloseable— el bloque try-with-resources libera sus conexiones HTTP.
Hazlo visualmente
¿Construyendo la proyección o una lectura condicional a mano? Usa el DynamoDB Expression Builder gratuito para montar la expresión y copiar los valores exactos de ProjectionExpression / ExpressionAttributeNames.
Para explorar tablas y ejecutar GetItem en una interfaz gráfica — formulario de clave, cuadrícula de resultados, copia del código generado con un clic — descarga DynoTable.
Ejemplos relacionados
- DynamoDB GetItem en Go — la misma lectura con AWS SDK para Go v2.
- DynamoDB Query en Java — lee una partición entera en lugar de un solo item.
- Cómo funcionan las claves de partición de DynamoDB — por qué
GetItemnecesita la clave completa. - DynamoDB ResourceNotFoundException — el primer error habitual aquí: nombre de tabla o región incorrectos.
- "The provided key element does not match the schema" — la clave que pasas no coincide con el esquema de clave de la tabla.
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
Verificado por última vez el 2026-07-13 contra la documentación oficial de AWS enlazada arriba.