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 extends S>
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 extends S>
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;
}