适用于 Java 的 SDK 版本 1 和版本 2 之间的字符串处理差异 - AWS SDK for Java 2.x

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

适用于 Java 的 SDK 版本 1 和版本 2 之间的字符串处理差异

向 DynamoDB 发送数据时,V1 和 V2 对空字符串的处理方式有所不同:

  • V1:在将空字符串发送到 DynamoDB 之前将空字符串转换为空值(导致没有属性)

  • V2:将空字符串作为实际的空字符串值发送到 DynamoDB

重要

迁移到 V2 后,如果您不想在 DynamoDB 中存储空字符串,则必须实现自定义转换器。如果没有自定义转换器,V2 会将空字符串作为实际的空字符串属性存储在 DynamoDB 项目中,这与 V1 完全省略这些属性的行为不同。

例 V2 的自定义转换器,用于将空字符串属性转换为 null
/** * 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; } }