本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
適用於 Java 的 SDK 第 1 版和第 2 版之間的字串處理差異
將資料傳送至 DynamoDB 時,V1 和 V2 會以不同的方式處理空字串:
-
V1:將空字串轉換為 null 值,再傳送至 DynamoDB (無屬性)
-
V2:將空字串做為實際空字串值傳送至 DynamoDB
重要
遷移至 V2 之後,如果您不希望在 DynamoDB 中存放空字串,則必須實作自訂轉換器。如果沒有自訂轉換器,V2 會將空字串儲存為 DynamoDB 項目中的實際空字串屬性,這與 V1 完全省略這些屬性的行為不同。
範例 將空字串屬性轉換為 null 的 V2 自訂轉換器
/** * 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; } }