diff --git a/pom.xml b/pom.xml index 34654b778d..6cfa5fe508 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ org.springframework.data spring-data-mongodb-parent - 4.1.0-SNAPSHOT + 4.1.x-4371-SNAPSHOT pom Spring Data MongoDB diff --git a/spring-data-mongodb-benchmarks/pom.xml b/spring-data-mongodb-benchmarks/pom.xml index 1b2a1390e6..1ccaf6f1c8 100644 --- a/spring-data-mongodb-benchmarks/pom.xml +++ b/spring-data-mongodb-benchmarks/pom.xml @@ -7,7 +7,7 @@ org.springframework.data spring-data-mongodb-parent - 4.1.0-SNAPSHOT + 4.1.x-4371-SNAPSHOT ../pom.xml diff --git a/spring-data-mongodb-distribution/pom.xml b/spring-data-mongodb-distribution/pom.xml index 888aaff6f5..e57d74ba9e 100644 --- a/spring-data-mongodb-distribution/pom.xml +++ b/spring-data-mongodb-distribution/pom.xml @@ -15,7 +15,7 @@ org.springframework.data spring-data-mongodb-parent - 4.1.0-SNAPSHOT + 4.1.x-4371-SNAPSHOT ../pom.xml diff --git a/spring-data-mongodb/pom.xml b/spring-data-mongodb/pom.xml index 597ca94f38..1ce615e66e 100644 --- a/spring-data-mongodb/pom.xml +++ b/spring-data-mongodb/pom.xml @@ -13,7 +13,7 @@ org.springframework.data spring-data-mongodb-parent - 4.1.0-SNAPSHOT + 4.1.x-4371-SNAPSHOT ../pom.xml diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/convert/MappingMongoConverter.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/convert/MappingMongoConverter.java index 5ed2af8e9f..2bfb90150c 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/convert/MappingMongoConverter.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/convert/MappingMongoConverter.java @@ -2313,8 +2313,10 @@ public S convert(Object source, TypeInformation if (source instanceof Collection collection) { Class rawType = typeHint.getType(); - if (!Object.class.equals(rawType)) { + if (!Object.class.equals(rawType) && !String.class.equals(rawType)) { + if (!rawType.isArray() && !ClassUtils.isAssignable(Iterable.class, rawType)) { + throw new MappingException( String.format(INCOMPATIBLE_TYPES, source, source.getClass(), rawType, getPath())); } @@ -2343,11 +2345,6 @@ public S convert(Object source, TypeInformation return (S) dbRefConverter.convert(context, dbRef, typeHint); } - if (source instanceof Collection) { - throw new MappingException( - String.format(INCOMPATIBLE_TYPES, source, BasicDBList.class, typeHint.getType(), getPath())); - } - if (BsonUtils.supportsBson(source)) { return (S) documentConverter.convert(context, BsonUtils.asBson(source), typeHint); } 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 cf2b59a0a1..46d23f831b 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 @@ -2831,6 +2831,18 @@ public org.bson.Document write(@Nullable String domainValue, MongoConversionCont assertThat(converter.read(Cyclic.class, source).cycle.value).isEqualTo("v2"); } + @Test // GH-4371 + void shouldConvertTypesToStringTargetType() { + + org.bson.Document source = org.bson.Document.parse(""" + { + city : ["Gotham", "Metropolis"] + } + """); + + assertThat(converter.read(Address.class, source).city).isEqualTo("Gotham,Metropolis"); + } + static class GenericType { T content; }