翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
SDK for Java のバージョン 1 とバージョン 2 の文字列処理の違い
V1 と V2 は、DynamoDB にデータを送信するときに空の文字列を異なる方法で処理します。
-
V1: DynamoDB に送信する前に空の文字列を null 値に変換します (結果的に属性なし)
-
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; } }