diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/util/json/ParameterBindingJsonReader.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/util/json/ParameterBindingJsonReader.java index c7c3c6076..e52d66730 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/util/json/ParameterBindingJsonReader.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/util/json/ParameterBindingJsonReader.java @@ -1412,7 +1412,8 @@ public class ParameterBindingJsonReader extends AbstractBsonReader { // Spring Data Customization START if (patternToken.getType() == JsonTokenType.STRING || patternToken.getType() == JsonTokenType.UNQUOTED_STRING) { - return bindableValueFor(patternToken).getValue().toString(); + Object value = bindableValueFor(patternToken).getValue(); + return value != null ? value.toString() : null; } throw new JsonParseException("JSON reader expected a string but found '%s'.", patternToken.getValue()); 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 8519f4f76..37115e522 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 @@ -243,6 +243,14 @@ class ParameterBindingJsonReaderUnitTests { assertThat(value.getTime()).isEqualTo(1429196157626L); } + @Test // GH-4282 + public void shouldReturnNullAsSuch() { + + String json = "{ 'value' : ObjectId(?0) }"; + assertThatExceptionOfType(IllegalArgumentException.class).isThrownBy(() -> parse(json, new Object[] { null })) + .withMessageContaining("hexString"); + } + @Test // DATAMONGO-2418 void shouldNotAccessSpElEvaluationContextWhenNoSpElPresentInBindableTarget() {