Skip to content

Commit 4829b07

Browse files
authored
ReactiveElasticsearchOperations indexName is encoded twice.
Original Pull Request #1666 Closes #1665
1 parent 1a02c1e commit 4829b07

File tree

2 files changed

+36
-1
lines changed

2 files changed

+36
-1
lines changed

Diff for: src/main/java/org/springframework/data/elasticsearch/client/reactive/DefaultWebClientProvider.java

+7-1
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
import org.springframework.util.Assert;
2828
import org.springframework.web.reactive.function.client.WebClient;
2929
import org.springframework.web.reactive.function.client.WebClient.Builder;
30+
import org.springframework.web.util.DefaultUriBuilderFactory;
3031

3132
/**
3233
* Default {@link WebClientProvider} that uses cached {@link WebClient} instances per {@code hostAndPort}.
@@ -155,8 +156,13 @@ protected WebClient createWebClientForSocketAddress(InetSocketAddress socketAddr
155156

156157
String baseUrl = String.format("%s://%s:%d%s", this.scheme, socketAddress.getHostString(), socketAddress.getPort(),
157158
pathPrefix == null ? "" : '/' + pathPrefix);
159+
160+
DefaultUriBuilderFactory uriBuilderFactory = new DefaultUriBuilderFactory(baseUrl);
161+
// the template will already be encoded by the RequestConverters methods
162+
uriBuilderFactory.setEncodingMode(DefaultUriBuilderFactory.EncodingMode.VALUES_ONLY);
163+
builder.uriBuilderFactory(uriBuilderFactory); //
164+
158165
WebClient webClient = builder //
159-
.baseUrl(baseUrl) //
160166
.filter((request, next) -> next.exchange(request) //
161167
.doOnError(errorListener)) //
162168
.build(); //

Diff for: src/test/java/org/springframework/data/elasticsearch/core/ReactiveElasticsearchTemplateIntegrationTests.java

+29
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,8 @@
3232
import java.lang.Long;
3333
import java.lang.Object;
3434
import java.net.ConnectException;
35+
import java.time.LocalDate;
36+
import java.time.format.DateTimeFormatter;
3537
import java.util.ArrayList;
3638
import java.util.Arrays;
3739
import java.util.Collections;
@@ -1031,6 +1033,32 @@ void shouldReturnMonoOfSearchPage() {
10311033
assertThat(searchHits.getSearchHits().size()).isEqualTo(5);
10321034
}).verifyComplete();
10331035
}
1036+
1037+
@Test // #1665
1038+
@DisplayName("should be able to process date-math-index names")
1039+
void shouldBeAbleToProcessDateMathIndexNames() {
1040+
1041+
String indexName = "foo-" + LocalDate.now().format(DateTimeFormatter.ofPattern("yyyy.MM"));
1042+
String dateMathIndexName = "<foo-{now/M{yyyy.MM}}>";
1043+
1044+
template.indexOps(IndexCoordinates.of(dateMathIndexName)) //
1045+
.create() //
1046+
.as(StepVerifier::create) //
1047+
.expectNext(true) //
1048+
.verifyComplete(); //
1049+
1050+
template.indexOps(IndexCoordinates.of(indexName)) //
1051+
.exists() //
1052+
.as(StepVerifier::create) //
1053+
.expectNext(true) //
1054+
.verifyComplete(); //
1055+
1056+
template.indexOps(IndexCoordinates.of(dateMathIndexName)) //
1057+
.delete() //
1058+
.as(StepVerifier::create) //
1059+
.expectNext(true) //
1060+
.verifyComplete(); //
1061+
}
10341062
// endregion
10351063

10361064
// region Helper functions
@@ -1128,5 +1156,6 @@ static class VersionedEntity {
11281156
@Id private String id;
11291157
@Version private Long version;
11301158
}
1159+
11311160
// endregion
11321161
}

0 commit comments

Comments
 (0)