Browse Source

DATAMONGO-1421 - Fix serialization in error message causing error itself.

We now make sure to safely serialize the criteria object used for creating the error message when raising an `InvalidMongoDbApiUsageException` in cases where `addCriteria` is used to add multiple entries for the same property.

Original pull request: #448.
pull/410/merge
Christoph Strobl 9 years ago committed by Mark Paluch
parent
commit
6b1d95b20d
  1. 4
      spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/query/Query.java
  2. 17
      spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/query/QueryTests.java

4
spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/query/Query.java

@ -1,5 +1,5 @@ @@ -1,5 +1,5 @@
/*
* Copyright 2010-2015 the original author or authors.
* Copyright 2010-2017 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -96,7 +96,7 @@ public class Query { @@ -96,7 +96,7 @@ public class Query {
} else {
throw new InvalidMongoDbApiUsageException(
"Due to limitations of the com.mongodb.BasicDBObject, " + "you can't add a second '" + key + "' criteria. "
+ "Query already contains '" + existing.getCriteriaObject() + "'.");
+ "Query already contains '" + serializeToJsonSafely(existing.getCriteriaObject()) + "'.");
}
return this;

17
spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/query/QueryTests.java

@ -38,6 +38,7 @@ import org.springframework.data.mongodb.core.SpecialDoc; @@ -38,6 +38,7 @@ import org.springframework.data.mongodb.core.SpecialDoc;
* @author Oliver Gierke
* @author Patryk Wasik
* @author Thomas Darimont
* @author Christoph Strobl
*/
public class QueryTests {
@ -213,4 +214,20 @@ public class QueryTests { @@ -213,4 +214,20 @@ public class QueryTests {
assertThat(query.getRestrictedTypes().size(), is(1));
assertThat(query.getRestrictedTypes(), hasItems(Arrays.asList(SpecialDoc.class).toArray(new Class<?>[0])));
}
@Test // DATAMONGO-1421
public void addCriteriaForSamePropertyMultipleTimesShouldThrowAndSafelySerializeErrorMessage() {
exception.expect(InvalidMongoDbApiUsageException.class);
exception.expectMessage("second 'value' criteria");
exception.expectMessage("already contains '{ \"value\" : { $java : VAL_1 } }'");
Query query = new Query();
query.addCriteria(where("value").is(EnumType.VAL_1));
query.addCriteria(where("value").is(EnumType.VAL_2));
}
enum EnumType {
VAL_1, VAL_2
}
}

Loading…
Cancel
Save