As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.
Diferenças no tratamento de strings entre a versão 1 e a versão 2 do SDK for Java
A V1 e a V2 lidam com strings vazias de forma diferente ao enviar dados para o DynamoDB:
-
V1: converte strings vazias em valores nulos antes de enviar para o DynamoDB (resultando em nenhum atributo)
-
V2: Envia strings vazias como valores reais de string vazias para o DynamoDB
Importante
Depois de migrar para a V2, se você não quiser que strings vazias sejam armazenadas no DynamoDB, você deve implementar conversores personalizados. Sem conversores personalizados, a V2 armazena strings vazias como atributos reais de string vazias em seus itens do DynamoDB, o que difere do comportamento da V1 de omitir totalmente esses atributos.
exemplo conversor personalizado para V2 que converte um atributo de string vazio em 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; } }