From 32f3e60c9fc6fad0ff46211cecc3d24e329af02f Mon Sep 17 00:00:00 2001 From: Christoph Strobl Date: Tue, 21 Apr 2020 10:08:59 +0200 Subject: [PATCH] DATAMONGO-2523 - Fix Json binding of SpEL expressions in arrays. The closing bracket must not have a leading whitespace. Original pull request: #859. --- .../data/mongodb/util/json/JsonScanner.java | 2 +- .../util/json/ParameterBindingJsonReaderUnitTests.java | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/util/json/JsonScanner.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/util/json/JsonScanner.java index 683da2575..b49403ee6 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/util/json/JsonScanner.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/util/json/JsonScanner.java @@ -231,7 +231,7 @@ class JsonScanner { parenthesisCount--; if (parenthesisCount == 0) { - buffer.read(); + c = buffer.read(); break; } } 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 b1ebc295d..c3257b5f7 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 @@ -256,6 +256,14 @@ class ParameterBindingJsonReaderUnitTests { .isEqualTo(new Document("name", new Document("$in", Collections.singletonList("dalinar,kohlin")))); } + @Test // DATAMONGO-2523 + void bindSpelExpressionInArrayCorrectly/* closing bracket must not have leading whitespace! */() { + + Document target = parse("{ $and : [?#{ [0] == null ? { '$where' : 'true' } : { 'v1' : { '$in' : {[0]} } } }]}", 1); + + assertThat(target).isEqualTo(Document.parse("{\"$and\": [{\"v1\": {\"$in\": [1]}}]}")); + } + private static Document parse(String json, Object... args) { ParameterBindingJsonReader reader = new ParameterBindingJsonReader(json, args);