

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# SDK for Java のバージョン 1 とバージョン 2 の文字列処理の違い
<a name="dynamodb-migration-string-handling"></a>

V1 と V2 では、DynamoDB にデータを送信するときの空の文字列の処理方法が異なります。
+ **V1**: DynamoDB に送信する前に空の文字列を null 値に変換します (属性なしになります)。
+ **V2**: 空の文字列を実際の空の文字列値として DynamoDB に送信します。

**重要**  
V2 に移行した後、空の文字列を DynamoDB に保存したくない場合は、カスタムコンバータを実装する必要があります。カスタムコンバータがない場合、V2 は空の文字列を実際の空の文字列属性として DynamoDB 項目に保存します。これは、これらの属性を完全に省略する V1 の動作とは異なります。

**Example 空の文字列属性を 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;
    }
}
```

