Browse Source

DATAMONGO-2476 - Fix Json parsing for unquoted placeholders in arrays.

Original pull request: #835.
pull/838/head
Christoph Strobl 6 years ago committed by Mark Paluch
parent
commit
81c68955fe
No known key found for this signature in database
GPG Key ID: 51A00FA751B91849
  1. 2
      spring-data-mongodb/src/main/java/org/springframework/data/mongodb/util/json/JsonScanner.java
  2. 35
      spring-data-mongodb/src/test/java/org/springframework/data/mongodb/util/json/ParameterBindingJsonReaderUnitTests.java

2
spring-data-mongodb/src/main/java/org/springframework/data/mongodb/util/json/JsonScanner.java

@ -219,7 +219,7 @@ class JsonScanner {
boolean isExpression = false; boolean isExpression = false;
int parenthesisCount = 0; int parenthesisCount = 0;
while (c == '$' || c == '_' || Character.isLetterOrDigit(c) || c == '#' || c == '{' || c == '[' || c == ']' while (c == '$' || c == '_' || Character.isLetterOrDigit(c) || c == '#' || c == '{' || c == '['
|| (isExpression && isExpressionAllowedChar(c))) { || (isExpression && isExpressionAllowedChar(c))) {
if (charCount == 0 && c == '#') { if (charCount == 0 && c == '#') {

35
spring-data-mongodb/src/test/java/org/springframework/data/mongodb/util/json/ParameterBindingJsonReaderUnitTests.java

@ -220,6 +220,41 @@ public class ParameterBindingJsonReaderUnitTests {
assertThat(target).isEqualTo(new Document("name", "value")); assertThat(target).isEqualTo(new Document("name", "value"));
} }
@Test // DATAMONGO-2476
public void bindUnquotedParameterInArray() {
Document target = parse("{ 'name' : { $in : [?0] } }", "kohlin");
assertThat(target).isEqualTo(new Document("name", new Document("$in", Collections.singletonList("kohlin"))));
}
@Test // DATAMONGO-2476
public void bindMultipleUnquotedParameterInArray() {
Document target = parse("{ 'name' : { $in : [?0,?1] } }", "dalinar", "kohlin");
assertThat(target).isEqualTo(new Document("name", new Document("$in",Arrays.asList("dalinar", "kohlin"))));
}
@Test // DATAMONGO-2476
public void bindUnquotedParameterInArrayWithSpaces() {
Document target = parse("{ 'name' : { $in : [ ?0 ] } }", "kohlin");
assertThat(target).isEqualTo(new Document("name", new Document("$in", Collections.singletonList("kohlin"))));
}
@Test // DATAMONGO-2476
public void bindQuotedParameterInArray() {
Document target = parse("{ 'name' : { $in : ['?0'] } }", "kohlin");
assertThat(target).isEqualTo(new Document("name", new Document("$in", Collections.singletonList("kohlin"))));
}
@Test // DATAMONGO-2476
public void bindQuotedMulitParameterInArray() {
Document target = parse("{ 'name' : { $in : ['?0,?1'] } }", "dalinar", "kohlin");
assertThat(target).isEqualTo(new Document("name", new Document("$in", Collections.singletonList("dalinar,kohlin"))));
}
private static Document parse(String json, Object... args) { private static Document parse(String json, Object... args) {
ParameterBindingJsonReader reader = new ParameterBindingJsonReader(json, args); ParameterBindingJsonReader reader = new ParameterBindingJsonReader(json, args);

Loading…
Cancel
Save