diff --git a/services-custom/dynamodb-enhanced/src/main/java/software/amazon/awssdk/enhanced/dynamodb/internal/converter/attribute/StringAttributeConverter.java b/services-custom/dynamodb-enhanced/src/main/java/software/amazon/awssdk/enhanced/dynamodb/internal/converter/attribute/StringAttributeConverter.java index bf558d03dbbd..4d8da920d6a9 100644 --- a/services-custom/dynamodb-enhanced/src/main/java/software/amazon/awssdk/enhanced/dynamodb/internal/converter/attribute/StringAttributeConverter.java +++ b/services-custom/dynamodb-enhanced/src/main/java/software/amazon/awssdk/enhanced/dynamodb/internal/converter/attribute/StringAttributeConverter.java @@ -125,8 +125,14 @@ public String convertMap(Map value) { }; return value.entrySet().stream() - .collect(Collectors.toMap(Map.Entry::getKey, i -> toString(i.getValue()), - throwingMerger, LinkedHashMap::new)) + .collect(Collectors.toMap( + Map.Entry::getKey, + i -> { + String converted = toString(i.getValue()); + return converted == null ? "null" : converted; + }, + throwingMerger, + LinkedHashMap::new)) .toString(); } diff --git a/services-custom/dynamodb-enhanced/src/test/java/software/amazon/awssdk/enhanced/dynamodb/converters/attribute/StringAttributeConvertersTest.java b/services-custom/dynamodb-enhanced/src/test/java/software/amazon/awssdk/enhanced/dynamodb/converters/attribute/StringAttributeConvertersTest.java index 8f1fdef012ca..8d10cba3fc80 100644 --- a/services-custom/dynamodb-enhanced/src/test/java/software/amazon/awssdk/enhanced/dynamodb/converters/attribute/StringAttributeConvertersTest.java +++ b/services-custom/dynamodb-enhanced/src/test/java/software/amazon/awssdk/enhanced/dynamodb/converters/attribute/StringAttributeConvertersTest.java @@ -56,6 +56,7 @@ import software.amazon.awssdk.enhanced.dynamodb.internal.converter.attribute.UuidAttributeConverter; import software.amazon.awssdk.enhanced.dynamodb.internal.converter.attribute.ZoneIdAttributeConverter; import software.amazon.awssdk.enhanced.dynamodb.internal.converter.attribute.ZoneOffsetAttributeConverter; +import software.amazon.awssdk.services.dynamodb.model.AttributeValue; import software.amazon.awssdk.utils.ImmutableMap; public class StringAttributeConvertersTest { @@ -254,4 +255,16 @@ public void stringSetAttributeConverter_ReturnsSSType() { SetAttributeConverter> converter = SetAttributeConverter.setConverter(StringAttributeConverter.create()); assertThat(converter.attributeValueType()).isEqualTo(AttributeValueType.SS); } + + @Test + public void stringAttributeConverter_convertsMapWithNullValue() { + StringAttributeConverter converter = StringAttributeConverter.create(); + + String result = transformTo(converter, fromMap(ImmutableMap.of( + "stringField", AttributeValue.builder().s("value").build(), + "nullField", AttributeValue.builder().nul(true).build()))); + + assertThat(result).contains("stringField=value"); + assertThat(result).contains("nullField=null"); + } }