From 98795cb33e1ff7df681a4b8051e6d456342cf5a8 Mon Sep 17 00:00:00 2001 From: Christoph Strobl Date: Thu, 1 Jun 2023 08:48:35 +0200 Subject: [PATCH] Convert BsonUndefined to null value. Register a reading converter that returns null when attempting to read a value of type BsonUndefined. Prior to this change users faced a ConverterNotFoundException when source documents contained BsonUndefined. Resolves: #2350 --- .../data/mongodb/core/convert/MongoConverters.java | 2 ++ .../core/convert/MappingMongoConverterUnitTests.java | 8 ++++++++ 2 files changed, 10 insertions(+) diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/convert/MongoConverters.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/convert/MongoConverters.java index 681eba145..734469797 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/convert/MongoConverters.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/convert/MongoConverters.java @@ -33,6 +33,7 @@ import java.util.concurrent.atomic.AtomicLong; import org.bson.BsonReader; import org.bson.BsonTimestamp; +import org.bson.BsonUndefined; import org.bson.BsonWriter; import org.bson.Document; import org.bson.codecs.Codec; @@ -104,6 +105,7 @@ abstract class MongoConverters { converters.add(BinaryToByteArrayConverter.INSTANCE); converters.add(BsonTimestampToInstantConverter.INSTANCE); + converters.add(reading(BsonUndefined.class, Object.class, it -> null)); converters.add(reading(String.class, URI.class, URI::create).andWriting(URI::toString)); return converters; diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/convert/MappingMongoConverterUnitTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/convert/MappingMongoConverterUnitTests.java index 46d23f831..c36ef4ee9 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/convert/MappingMongoConverterUnitTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/convert/MappingMongoConverterUnitTests.java @@ -34,6 +34,7 @@ import java.time.ZoneOffset; import java.time.temporal.ChronoUnit; import java.util.*; +import org.bson.BsonUndefined; import org.bson.types.Binary; import org.bson.types.Code; import org.bson.types.Decimal128; @@ -2843,6 +2844,13 @@ class MappingMongoConverterUnitTests { assertThat(converter.read(Address.class, source).city).isEqualTo("Gotham,Metropolis"); } + @Test // GH-2350 + void shouldConvertBsonUndefinedToNull() { + + org.bson.Document source = new org.bson.Document("s", "hallway drive").append("city", new BsonUndefined()); + assertThat(converter.read(Address.class, source).city).isNull(); + } + static class GenericType { T content; }