From 70d2de7eec8eed95edbe4aa0b032df927e141b58 Mon Sep 17 00:00:00 2001 From: Peter-Josef Meisch Date: Tue, 18 Jul 2023 20:49:46 +0000 Subject: [PATCH] Fix MappingElasticsearchConverter. Original Pull Request #2637 Closes #2627 (cherry picked from commit d9bb9911f91f2da8723e579fb3962ecf13a5a651) (cherry picked from commit c045a8ae298efac20eecf877f9b5c60209b2e11e) --- .../MappingElasticsearchConverter.java | 2 +- ...appingElasticsearchConverterUnitTests.java | 49 +++++++++++++++++++ 2 files changed, 50 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/springframework/data/elasticsearch/core/convert/MappingElasticsearchConverter.java b/src/main/java/org/springframework/data/elasticsearch/core/convert/MappingElasticsearchConverter.java index e1ebd09b3..a5f0b1440 100644 --- a/src/main/java/org/springframework/data/elasticsearch/core/convert/MappingElasticsearchConverter.java +++ b/src/main/java/org/springframework/data/elasticsearch/core/convert/MappingElasticsearchConverter.java @@ -919,7 +919,7 @@ public class MappingElasticsearchConverter Class elementType = element == null ? null : element.getClass(); - if (elementType == null || conversions.isSimpleType(elementType)) { + if (elementType == null || isSimpleType(elementType)) { collection.add(getPotentiallyConvertedSimpleWrite(element, componentType != null ? componentType.getType() : Object.class)); } else if (element instanceof Collection || elementType.isArray()) { diff --git a/src/test/java/org/springframework/data/elasticsearch/core/convert/MappingElasticsearchConverterUnitTests.java b/src/test/java/org/springframework/data/elasticsearch/core/convert/MappingElasticsearchConverterUnitTests.java index 85798809a..88f5a20af 100644 --- a/src/test/java/org/springframework/data/elasticsearch/core/convert/MappingElasticsearchConverterUnitTests.java +++ b/src/test/java/org/springframework/data/elasticsearch/core/convert/MappingElasticsearchConverterUnitTests.java @@ -908,6 +908,55 @@ public class MappingElasticsearchConverterUnitTests { assertEquals(expected, document.toJson(), false); } + @Test // #2627 + @DisplayName("should write Map containing collection containing map") + void shouldWriteMapContainingCollectionContainingMap() throws JSONException { + + class EntityWithMapCollectionMap { + Map map; + } + class InnerEntity { + String prop1; + + String prop2; + + public InnerEntity() {} + + public InnerEntity(String prop1, String prop2) { + this.prop1 = prop1; + this.prop2 = prop2; + } + + } + + var entity = new EntityWithMapCollectionMap(); + entity.map = Collections.singletonMap("collection", + Collections.singletonList(Collections.singletonMap("destination", new InnerEntity("prop1", "prop2")))); + + var expected = """ + { + "_class": "org.springframework.data.elasticsearch.core.convert.MappingElasticsearchConverterUnitTests$1EntityWithMapCollectionMap", + "map": { + "collection": [ + { + "destination": { + "_class": "org.springframework.data.elasticsearch.core.convert.MappingElasticsearchConverterUnitTests$1InnerEntity", + "prop1": "prop1", + "prop2": "prop2" + } + } + ] + } + } + """; + + Document document = Document.create(); + + mappingElasticsearchConverter.write(entity, document); + + assertEquals(expected, document.toJson(), false); + } + @Nested class RangeTests {