Trim BindlableMongoExpression input.
Trim the given source so that wrapping checks still work for text blocks. Fix a typo in Javadoc. Resolves: #4821 Original Pull Request: #4822
This commit is contained in:
committed by
Christoph Strobl
parent
9e18fa4a6d
commit
2955aab3b8
@@ -23,13 +23,14 @@ import org.bson.codecs.configuration.CodecRegistry;
|
||||
import org.springframework.data.mongodb.util.json.ParameterBindingDocumentCodec;
|
||||
import org.springframework.data.util.Lazy;
|
||||
import org.springframework.lang.Nullable;
|
||||
import org.springframework.util.Assert;
|
||||
import org.springframework.util.ObjectUtils;
|
||||
import org.springframework.util.StringUtils;
|
||||
|
||||
/**
|
||||
* A {@link MongoExpression} using the {@link ParameterBindingDocumentCodec} for parsing a raw ({@literal json})
|
||||
* expression. The expression will be wrapped within <code>{ ... }</code> if necessary. The actual parsing and parameter
|
||||
* binding of placeholders like {@code ?0} is delayed upon first call on the the target {@link Document} via
|
||||
* binding of placeholders like {@code ?0} is delayed upon first call on the target {@link Document} via
|
||||
* {@link #toDocument()}.
|
||||
* <br />
|
||||
*
|
||||
@@ -45,6 +46,7 @@ import org.springframework.util.StringUtils;
|
||||
* containing the required {@link org.bson.codecs.Codec codec} via {@link #withCodecRegistry(CodecRegistry)}.
|
||||
*
|
||||
* @author Christoph Strobl
|
||||
* @author Giacomo Baso
|
||||
* @since 3.2
|
||||
*/
|
||||
public class BindableMongoExpression implements MongoExpression {
|
||||
@@ -77,7 +79,9 @@ public class BindableMongoExpression implements MongoExpression {
|
||||
public BindableMongoExpression(String expression, @Nullable CodecRegistryProvider codecRegistryProvider,
|
||||
@Nullable Object[] args) {
|
||||
|
||||
this.expressionString = expression;
|
||||
Assert.notNull(expression, "Expression must not be null");
|
||||
|
||||
this.expressionString = expression.trim();
|
||||
this.codecRegistryProvider = codecRegistryProvider;
|
||||
this.args = args;
|
||||
this.target = Lazy.of(this::parse);
|
||||
|
||||
@@ -42,6 +42,7 @@ import org.springframework.data.mongodb.test.util.Template;
|
||||
*
|
||||
* @author Christoph Strobl
|
||||
* @author Mark Paluch
|
||||
* @author Giacomo Baso
|
||||
*/
|
||||
@ExtendWith(MongoTemplateExtension.class)
|
||||
@EnableIfMongoServerVersion(isGreaterThanEqual = "4.4")
|
||||
@@ -89,6 +90,21 @@ class MongoTemplateFieldProjectionTests {
|
||||
assertThat(result).isEqualTo(luke.upperCaseLastnameClone());
|
||||
}
|
||||
|
||||
@Test // GH-4821
|
||||
void usesMongoExpressionWithLineBreaksAsIs() {
|
||||
|
||||
Person result = findLuke(fields -> {
|
||||
fields.include("firstname").project(MongoExpression.create("""
|
||||
{
|
||||
'$toUpper' : '$last_name'
|
||||
}
|
||||
"""))
|
||||
.as("last_name");
|
||||
});
|
||||
|
||||
assertThat(result).isEqualTo(luke.upperCaseLastnameClone());
|
||||
}
|
||||
|
||||
@Test // GH-3583
|
||||
void mapsAggregationExpressionToDomainType() {
|
||||
|
||||
|
||||
Reference in New Issue
Block a user