

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 適用於 Java 的 SDK 第 1 版和第 2 版之間的字串處理差異
<a name="dynamodb-migration-string-handling"></a>

將資料傳送至 DynamoDB 時，V1 和 V2 會以不同的方式處理空字串：
+ **V1**：將空字串轉換為 null 值，再傳送至 DynamoDB （無屬性）
+ **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;
    }
}
```

