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 be456595..78656609 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 @@ -288,6 +288,8 @@ public class MappingElasticsearchConverter if (value instanceof List) { target.add(readValue(value, property, property.getTypeInformation().getActualType())); + } else if (value instanceof Map) { + target.add(readMapValue((Map) value, property, property.getTypeInformation().getActualType())); } else { target.add(readEntity(computeGenericValueTypeForRead(property, value), (Map) value)); } 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 99218cc4..1347f988 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 @@ -677,6 +677,24 @@ public class MappingElasticsearchConverterUnitTests { assertThat(wrapper.getSchemaLessObject()).isEqualTo(mapWithSimpleValues); } + @Test // DATAES-797 + void readGenericListWithMaps() { + Map simpleMap = new HashMap<>(); + simpleMap.put("int", 1); + + List> listWithSimpleMap = new ArrayList<>(); + listWithSimpleMap.add(simpleMap); + + Map>> mapWithSimpleList = new HashMap<>(); + mapWithSimpleList.put("someKey", listWithSimpleMap); + + Document document = Document.create(); + document.put("schemaLessObject", mapWithSimpleList); + + SchemaLessObjectWrapper wrapper = mappingElasticsearchConverter.read(SchemaLessObjectWrapper.class, document); + assertThat(wrapper.getSchemaLessObject()).isEqualTo(mapWithSimpleList); + } + private String pointTemplate(String name, Point point) { return String.format(Locale.ENGLISH, "\"%s\":{\"lat\":%.1f,\"lon\":%.1f}", name, point.getX(), point.getY()); }