Unterschiede im Umgang mit Zeichenketten zwischen Version 1 und Version 2 des SDK for Java - AWS SDK for Java 2.x

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Unterschiede im Umgang mit Zeichenketten zwischen Version 1 und Version 2 des SDK for Java

V1 und V2 behandeln leere Zeichenketten unterschiedlich, wenn Daten an DynamoDB gesendet werden:

  • V1: Konvertiert leere Zeichenketten vor dem Senden an DynamoDB in Nullwerte (was zu keinem Attribut führt)

  • V2: Sendet leere Zeichenketten als tatsächliche leere Zeichenkettenwerte an DynamoDB

Wichtig

Wenn Sie nach der Migration zu V2 keine leeren Zeichenketten in DynamoDB speichern möchten, müssen Sie benutzerdefinierte Konverter implementieren. Ohne benutzerdefinierte Konverter speichert V2 leere Zeichenfolgen als tatsächliche leere Zeichenkettenattribute in Ihren DynamoDB-Elementen, was sich von dem Verhalten von V1 unterscheidet, diese Attribute vollständig wegzulassen.

Beispiel benutzerdefinierter Konverter für V2, der ein leeres Zeichenkettenattribut in Null umwandelt
/** * 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; } }