diff --git a/src/main/java/org/springframework/data/elasticsearch/repository/query/ReactiveElasticsearchStringQuery.java b/src/main/java/org/springframework/data/elasticsearch/repository/query/ReactiveElasticsearchStringQuery.java index 66c36ad84..84a19e2ed 100644 --- a/src/main/java/org/springframework/data/elasticsearch/repository/query/ReactiveElasticsearchStringQuery.java +++ b/src/main/java/org/springframework/data/elasticsearch/repository/query/ReactiveElasticsearchStringQuery.java @@ -52,7 +52,8 @@ public class ReactiveElasticsearchStringQuery extends AbstractReactiveElasticsea @Override protected BaseQuery createQuery(ElasticsearchParametersParameterAccessor parameterAccessor) { - String queryString = new StringQueryUtil(getElasticsearchOperations().getElasticsearchConverter().getConversionService()) + String queryString = new StringQueryUtil( + getElasticsearchOperations().getElasticsearchConverter().getConversionService()) .replacePlaceholders(this.query, parameterAccessor); QueryStringSpELEvaluator evaluator = new QueryStringSpELEvaluator(queryString, parameterAccessor, queryMethod, diff --git a/src/main/java/org/springframework/data/elasticsearch/repository/support/ElasticsearchRepositoryFactory.java b/src/main/java/org/springframework/data/elasticsearch/repository/support/ElasticsearchRepositoryFactory.java index 2752b5464..698183a43 100644 --- a/src/main/java/org/springframework/data/elasticsearch/repository/support/ElasticsearchRepositoryFactory.java +++ b/src/main/java/org/springframework/data/elasticsearch/repository/support/ElasticsearchRepositoryFactory.java @@ -15,6 +15,11 @@ */ package org.springframework.data.elasticsearch.repository.support; +import static org.springframework.data.querydsl.QuerydslUtils.*; + +import java.lang.reflect.Method; +import java.util.Optional; + import org.springframework.data.elasticsearch.core.ElasticsearchOperations; import org.springframework.data.elasticsearch.repository.ElasticsearchRepository; import org.springframework.data.elasticsearch.repository.query.ElasticsearchPartQuery; @@ -34,16 +39,9 @@ import org.springframework.data.repository.query.QueryLookupStrategy; import org.springframework.data.repository.query.QueryLookupStrategy.Key; import org.springframework.data.repository.query.QueryMethodEvaluationContextProvider; import org.springframework.data.repository.query.RepositoryQuery; -import org.springframework.expression.TypeConverter; -import org.springframework.expression.spel.support.StandardTypeConverter; import org.springframework.lang.Nullable; import org.springframework.util.Assert; -import java.lang.reflect.Method; -import java.util.Optional; - -import static org.springframework.data.querydsl.QuerydslUtils.QUERY_DSL_PRESENT; - /** * Factory to create {@link ElasticsearchRepository} * diff --git a/src/main/java/org/springframework/data/elasticsearch/repository/support/spel/ElasticsearchCollectionValueToStringConverter.java b/src/main/java/org/springframework/data/elasticsearch/repository/support/spel/ElasticsearchCollectionValueToStringConverter.java index 1a0adb1e3..a53a3a034 100644 --- a/src/main/java/org/springframework/data/elasticsearch/repository/support/spel/ElasticsearchCollectionValueToStringConverter.java +++ b/src/main/java/org/springframework/data/elasticsearch/repository/support/spel/ElasticsearchCollectionValueToStringConverter.java @@ -15,13 +15,17 @@ */ package org.springframework.data.elasticsearch.repository.support.spel; +import java.util.Collection; +import java.util.Collections; +import java.util.Objects; +import java.util.Set; +import java.util.StringJoiner; + import org.springframework.core.convert.ConversionService; import org.springframework.core.convert.TypeDescriptor; import org.springframework.core.convert.converter.GenericConverter; import org.springframework.lang.Nullable; -import java.util.*; - /** * Convert a collection into string for value part of the elasticsearch query. *

@@ -30,6 +34,7 @@ import java.util.*; *

* eg: The value part of an elasticsearch terms query should looks like {@code ["hello \"Stranger\"","Another string"]} * for query + * *

  * {@code
  *  {
diff --git a/src/main/java/org/springframework/data/elasticsearch/repository/support/spel/ElasticsearchStringValueToStringConverter.java b/src/main/java/org/springframework/data/elasticsearch/repository/support/spel/ElasticsearchStringValueToStringConverter.java
index 07ad446b1..54a7d1d38 100644
--- a/src/main/java/org/springframework/data/elasticsearch/repository/support/spel/ElasticsearchStringValueToStringConverter.java
+++ b/src/main/java/org/springframework/data/elasticsearch/repository/support/spel/ElasticsearchStringValueToStringConverter.java
@@ -15,17 +15,17 @@
  */
 package org.springframework.data.elasticsearch.repository.support.spel;
 
-import org.springframework.core.convert.TypeDescriptor;
-import org.springframework.core.convert.converter.GenericConverter;
-import org.springframework.lang.Nullable;
-
 import java.util.Collections;
 import java.util.Set;
 import java.util.regex.Matcher;
 
+import org.springframework.core.convert.TypeDescriptor;
+import org.springframework.core.convert.converter.GenericConverter;
+import org.springframework.lang.Nullable;
+
 /**
- * Values in elasticsearch query may contain quotations and should be escaped when converting.
- * Note that the converter should only be used in this situation, rather than common string to string conversions.
+ * Values in elasticsearch query may contain quotations and should be escaped when converting. Note that the converter
+ * should only be used in this situation, rather than common string to string conversions.
  *
  * @since 5.3
  * @author Haibo Liu
diff --git a/src/main/java/org/springframework/data/elasticsearch/repository/support/spel/QueryStringSpELEvaluator.java b/src/main/java/org/springframework/data/elasticsearch/repository/support/spel/QueryStringSpELEvaluator.java
index 41123d250..ef504162f 100644
--- a/src/main/java/org/springframework/data/elasticsearch/repository/support/spel/QueryStringSpELEvaluator.java
+++ b/src/main/java/org/springframework/data/elasticsearch/repository/support/spel/QueryStringSpELEvaluator.java
@@ -15,6 +15,9 @@
  */
 package org.springframework.data.elasticsearch.repository.support.spel;
 
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
 import org.springframework.data.elasticsearch.core.convert.ConversionException;
 import org.springframework.data.elasticsearch.repository.query.ElasticsearchParametersParameterAccessor;
 import org.springframework.data.repository.query.QueryMethod;
@@ -32,9 +35,6 @@ import org.springframework.expression.spel.support.StandardTypeConverter;
 import org.springframework.lang.Nullable;
 import org.springframework.util.Assert;
 
-import java.util.Map;
-import java.util.concurrent.ConcurrentHashMap;
-
 /**
  * To evaluate the SpEL expressions of the query string.
  *
@@ -53,12 +53,13 @@ public class QueryStringSpELEvaluator {
 	private final TypeConverter elasticsearchSpELTypeConverter;
 
 	public QueryStringSpELEvaluator(String queryString, ElasticsearchParametersParameterAccessor parameterAccessor,
-									QueryMethod queryMethod, QueryMethodEvaluationContextProvider evaluationContextProvider) {
+			QueryMethod queryMethod, QueryMethodEvaluationContextProvider evaluationContextProvider) {
 		this.queryString = queryString;
 		this.parameterAccessor = parameterAccessor;
 		this.queryMethod = queryMethod;
 		this.evaluationContextProvider = evaluationContextProvider;
-		this.elasticsearchSpELTypeConverter = new StandardTypeConverter(ElasticsearchValueSpELConversionService.CONVERSION_SERVICE_LAZY);
+		this.elasticsearchSpELTypeConverter = new StandardTypeConverter(
+				ElasticsearchValueSpELConversionService.CONVERSION_SERVICE_LAZY);
 	}
 
 	/**
@@ -83,12 +84,11 @@ public class QueryStringSpELEvaluator {
 	}
 
 	/**
-	 * {@link Expression#getValue(EvaluationContext, Class)} is not used because the value part in SpEL should be converted
-	 * by {@link ElasticsearchStringValueToStringConverter} or
-	 * {@link ElasticsearchCollectionValueToStringConverter} to
-	 * escape the quotations, but other literal parts in SpEL expression should not be processed with these converters.
-	 * So we just get the string value from {@link LiteralExpression} directly rather than
-	 * {@link LiteralExpression#getValue(EvaluationContext, Class)}.
+	 * {@link Expression#getValue(EvaluationContext, Class)} is not used because the value part in SpEL should be
+	 * converted by {@link ElasticsearchStringValueToStringConverter} or
+	 * {@link ElasticsearchCollectionValueToStringConverter} to escape the quotations, but other literal parts in SpEL
+	 * expression should not be processed with these converters. So we just get the string value from
+	 * {@link LiteralExpression} directly rather than {@link LiteralExpression#getValue(EvaluationContext, Class)}.
 	 */
 	private String parseExpressions(Expression rootExpr, EvaluationContext context) {
 		StringBuilder parsed = new StringBuilder();
diff --git a/src/test/java/org/springframework/data/elasticsearch/repositories/custommethod/CustomMethodRepositoryIntegrationTests.java b/src/test/java/org/springframework/data/elasticsearch/repositories/custommethod/CustomMethodRepositoryIntegrationTests.java
index 9bb507598..f3c756d8a 100644
--- a/src/test/java/org/springframework/data/elasticsearch/repositories/custommethod/CustomMethodRepositoryIntegrationTests.java
+++ b/src/test/java/org/springframework/data/elasticsearch/repositories/custommethod/CustomMethodRepositoryIntegrationTests.java
@@ -16,11 +16,10 @@
 package org.springframework.data.elasticsearch.repositories.custommethod;
 
 import static org.assertj.core.api.Assertions.*;
-import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.junit.jupiter.api.Assertions.*;
 import static org.springframework.data.elasticsearch.annotations.FieldType.*;
 import static org.springframework.data.elasticsearch.utils.IdGenerator.*;
 
-import java.lang.Long;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
@@ -2073,8 +2072,8 @@ public abstract class CustomMethodRepositoryIntegrationTests {
 		SearchHits queryByString(String type);
 
 		/**
-		 * The parameter is annotated with {@link Nullable} deliberately to test that our elasticsearch SpEL converters
-		 * will not accept a null parameter as query value.
+		 * The parameter is annotated with {@link Nullable} deliberately to test that our elasticsearch SpEL converters will
+		 * not accept a null parameter as query value.
 		 */
 		@Query("""
 				{
@@ -2122,8 +2121,8 @@ public abstract class CustomMethodRepositoryIntegrationTests {
 		SearchHits queryByBeanPropertySpEL();
 
 		/**
-		 * The parameter is annotated with {@link Nullable} deliberately to test that our elasticsearch SpEL converters
-		 * will not accept a null parameter as query value.
+		 * The parameter is annotated with {@link Nullable} deliberately to test that our elasticsearch SpEL converters will
+		 * not accept a null parameter as query value.
 		 */
 		@Query("""
 				{
diff --git a/src/test/java/org/springframework/data/elasticsearch/repository/query/ElasticsearchStringQueryUnitTests.java b/src/test/java/org/springframework/data/elasticsearch/repository/query/ElasticsearchStringQueryUnitTests.java
index 60821db50..13ae5cb9c 100644
--- a/src/test/java/org/springframework/data/elasticsearch/repository/query/ElasticsearchStringQueryUnitTests.java
+++ b/src/test/java/org/springframework/data/elasticsearch/repository/query/ElasticsearchStringQueryUnitTests.java
@@ -343,8 +343,9 @@ public class ElasticsearchStringQueryUnitTests extends ElasticsearchStringQueryU
 
 		assertThat(query).isInstanceOf(StringQuery.class);
 		assertThat(((StringQuery) query).getSource()).isEqualTo(
-			"{ 'bool' : { 'must' : { 'terms' : { 'name' : [\"param\\\\1\",\"param\\\\2\"] } } } }");
+				"{ 'bool' : { 'must' : { 'terms' : { 'name' : [\"param\\\\1\",\"param\\\\2\"] } } } }");
 	}
+
 	private org.springframework.data.elasticsearch.core.query.Query createQuery(String methodName, Object... args)
 			throws NoSuchMethodException {
 
diff --git a/src/test/java/org/springframework/data/elasticsearch/repository/support/SimpleReactiveElasticsearchRepositoryIntegrationTests.java b/src/test/java/org/springframework/data/elasticsearch/repository/support/SimpleReactiveElasticsearchRepositoryIntegrationTests.java
index f7ebbc2fe..a516d48c6 100644
--- a/src/test/java/org/springframework/data/elasticsearch/repository/support/SimpleReactiveElasticsearchRepositoryIntegrationTests.java
+++ b/src/test/java/org/springframework/data/elasticsearch/repository/support/SimpleReactiveElasticsearchRepositoryIntegrationTests.java
@@ -21,9 +21,6 @@ import static org.springframework.data.elasticsearch.core.IndexOperationsAdapter
 import static org.springframework.data.elasticsearch.core.query.Query.*;
 import static org.springframework.data.elasticsearch.utils.IdGenerator.*;
 
-import org.springframework.data.elasticsearch.core.convert.ConversionException;
-import org.springframework.data.elasticsearch.repositories.custommethod.QueryParameter;
-import org.springframework.data.repository.query.Param;
 import reactor.core.publisher.Flux;
 import reactor.core.publisher.Mono;
 import reactor.test.StepVerifier;
@@ -58,9 +55,12 @@ import org.springframework.data.elasticsearch.annotations.Query;
 import org.springframework.data.elasticsearch.annotations.SourceFilters;
 import org.springframework.data.elasticsearch.core.ReactiveElasticsearchOperations;
 import org.springframework.data.elasticsearch.core.SearchHit;
+import org.springframework.data.elasticsearch.core.convert.ConversionException;
 import org.springframework.data.elasticsearch.core.mapping.IndexCoordinates;
 import org.springframework.data.elasticsearch.junit.jupiter.SpringIntegrationTest;
+import org.springframework.data.elasticsearch.repositories.custommethod.QueryParameter;
 import org.springframework.data.elasticsearch.utils.IndexNameProvider;
+import org.springframework.data.repository.query.Param;
 import org.springframework.data.repository.reactive.ReactiveCrudRepository;
 import org.springframework.lang.Nullable;
 
@@ -275,7 +275,7 @@ abstract class SimpleReactiveElasticsearchRepositoryIntegrationTests {
 				.block();
 
 		QueryParameter param = new QueryParameter("message");
-		
+
 		repository.queryByParameterPropertySpEL(param)
 				.as(StepVerifier::create) //
 				.expectNextMatches(searchHit -> SearchHit.class.isAssignableFrom(searchHit.getClass()))//
@@ -376,7 +376,7 @@ abstract class SimpleReactiveElasticsearchRepositoryIntegrationTests {
 				.block();
 
 		QueryParameter param = new QueryParameter("message");
-		
+
 		repository.queryByParameterPropertyCollectionSpEL(List.of(param))
 				.as(StepVerifier::create) //
 				.expectNextMatches(searchHit -> SearchHit.class.isAssignableFrom(searchHit.getClass()))//
@@ -392,7 +392,7 @@ abstract class SimpleReactiveElasticsearchRepositoryIntegrationTests {
 				.block();
 
 		QueryParameter param = new QueryParameter("message");
-		
+
 		repository.queryByParameterPropertyCollectionSpELWithParamAnnotation(List.of(param))
 				.as(StepVerifier::create) //
 				.expectNextMatches(searchHit -> SearchHit.class.isAssignableFrom(searchHit.getClass()))//
@@ -954,8 +954,8 @@ abstract class SimpleReactiveElasticsearchRepositoryIntegrationTests {
 		Flux findAllViaAnnotatedQueryByMessageLikePaged(String message, Pageable pageable);
 
 		/**
-		 * The parameter is annotated with {@link Nullable} deliberately to test that our elasticsearch SpEL converters
-		 * will not accept a null parameter as query value.
+		 * The parameter is annotated with {@link Nullable} deliberately to test that our elasticsearch SpEL converters will
+		 * not accept a null parameter as query value.
 		 */
 		@Query("""
 				{
@@ -1003,8 +1003,8 @@ abstract class SimpleReactiveElasticsearchRepositoryIntegrationTests {
 		Flux> queryByBeanPropertySpEL();
 
 		/**
-		 * The parameter is annotated with {@link Nullable} deliberately to test that our elasticsearch SpEL converters
-		 * will not accept a null parameter as query value.
+		 * The parameter is annotated with {@link Nullable} deliberately to test that our elasticsearch SpEL converters will
+		 * not accept a null parameter as query value.
 		 */
 		@Query("""
 				{