Diferencias en el manejo de cadenas entre la versión 1 y la versión 2 del SDK para Java - AWS SDK for Java 2.x

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Diferencias en el manejo de cadenas entre la versión 1 y la versión 2 del SDK para Java

V1 y V2 gestionan las cadenas vacías de forma diferente al enviar datos a DynamoDB:

  • V1: convierte las cadenas vacías en valores nulos antes de enviarlas a DynamoDB (lo que no produce ningún atributo)

  • V2: envía cadenas vacías como valores reales de cadenas vacías a DynamoDB

importante

Tras migrar a la versión 2, si no desea almacenar cadenas vacías en DynamoDB, debe implementar convertidores personalizados. Sin convertidores personalizados, V2 almacena las cadenas vacías como atributos de cadenas vacías reales en los elementos de DynamoDB, lo que difiere del comportamiento de V1 de omitir estos atributos por completo.

ejemplo conversor personalizado para V2 que convierte un atributo de cadena vacía en nulo
/** * Custom converter that maintains V1 behavior by converting empty strings to null values * when writing to DynamoDB, ensuring compatibility with existing data. No attribute will be saved to DynamoDB. */ public class NullifyEmptyStringConverter implements AttributeConverter<String> { @Override public AttributeValue transformFrom(String value) { if (value == null || value.isEmpty()) { return AttributeValue.builder().nul(true).build(); } return AttributeValue.builder().s(value).build(); } @Override public String transformTo(AttributeValue attributeValue) { if (attributeValue.nul()) { return null; } return attributeValue.s(); } @Override public EnhancedType<String> type() { return EnhancedType.of(String.class); } @Override public AttributeValueType attributeValueType() { return AttributeValueType.S; } } // V2 usage: @DynamoDbBean public class Customer { private String name; @DynamoDbConvertedBy(NullifyEmptyStringConverter.class) public String getName() { return name; } }