From ad4ab65a9f61967104aa0dc2602b7968df27ce26 Mon Sep 17 00:00:00 2001 From: Christoph Strobl Date: Mon, 28 Sep 2020 12:18:33 +0200 Subject: [PATCH] DATAMONGO-2633 - Fix json parsing of nested arrays in ParameterBindingDocumentCodec. Original pull request: #888. --- .../util/json/ParameterBindingDocumentCodec.java | 10 +--------- .../util/json/ParameterBindingJsonReaderUnitTests.java | 9 +++++++++ 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/util/json/ParameterBindingDocumentCodec.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/util/json/ParameterBindingDocumentCodec.java index 33eeee9ba..18860a49d 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/util/json/ParameterBindingDocumentCodec.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/util/json/ParameterBindingDocumentCodec.java @@ -336,15 +336,7 @@ public class ParameterBindingDocumentCodec implements CollectibleCodec reader.readStartArray(); List list = new ArrayList<>(); while (reader.readBsonType() != BsonType.END_OF_DOCUMENT) { - - // Spring Data Customization START - Object listValue = readValue(reader, decoderContext); - if (listValue instanceof Collection) { - list.addAll((Collection) listValue); - break; - } - list.add(listValue); - // Spring Data Customization END + list.add(readValue(reader, decoderContext)); } reader.readEndArray(); return list; diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/util/json/ParameterBindingJsonReaderUnitTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/util/json/ParameterBindingJsonReaderUnitTests.java index 47b103465..570c8d7f8 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/util/json/ParameterBindingJsonReaderUnitTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/util/json/ParameterBindingJsonReaderUnitTests.java @@ -349,6 +349,15 @@ public class ParameterBindingJsonReaderUnitTests { .isEqualTo(Document.parse("{ $and: [{'fieldA': {$in: [/ABC.*/, /CDE.*F/]}}, {'fieldB': {$ne: null}}]}")); } + @Test // DATAMONGO-2633 + public void shouldParseNestedArrays() { + + Document target = parse("{ 'stores.location' : { $geoWithin: { $centerSphere: [ [ ?0, 48.799029 ] , ?1 ] } } }", + 1.948516D, 0.004D); + assertThat(target).isEqualTo(Document + .parse("{ 'stores.location' : { $geoWithin: { $centerSphere: [ [ 1.948516, 48.799029 ] , 0.004 ] } } }")); + } + private static Document parse(String json, Object... args) { ParameterBindingJsonReader reader = new ParameterBindingJsonReader(json, args);