Skip to content

Commit 3099a2f

Browse files
authored
webclient explode query parameters support (#17441)
1 parent 1060479 commit 3099a2f

11 files changed

Lines changed: 55 additions & 20 deletions

File tree

modules/openapi-generator/src/main/resources/Java/libraries/webclient/api.mustache

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -92,11 +92,10 @@ public class {{classname}} {
9292
final MultiValueMap<String, Object> formParams = new LinkedMultiValueMap<String, Object>();
9393
{{#hasQueryParams}}
9494

95-
{{#queryParams}}
96-
queryParams.putAll(apiClient.parameterToMultiValueMap({{#collectionFormat}}ApiClient.CollectionFormat.valueOf("{{{.}}}".toUpperCase(Locale.ROOT)){{/collectionFormat}}{{^collectionFormat}}null{{/collectionFormat}}, "{{baseName}}", {{paramName}}));
97-
{{/queryParams}}
98-
{{/hasQueryParams}}
99-
{{#hasHeaderParams}}
95+
{{#queryParams}}{{#isExplode}}{{#hasVars}}{{#vars}}queryParams.putAll(apiClient.parameterToMultiValueMap({{#collectionFormat}}ApiClient.CollectionFormat.valueOf("{{{.}}}".toUpperCase(Locale.ROOT)){{/collectionFormat}}{{^collectionFormat}}null{{/collectionFormat}}, "{{baseName}}", {{paramName}}.{{getter}}()));
96+
{{/vars}}{{/hasVars}}{{^hasVars}}queryParams.putAll(apiClient.parameterToMultiValueMap({{#collectionFormat}}ApiClient.CollectionFormat.valueOf("{{{.}}}".toUpperCase(Locale.ROOT)){{/collectionFormat}}{{^collectionFormat}}null{{/collectionFormat}}, "{{baseName}}", {{paramName}}));
97+
{{/hasVars}}{{/isExplode}}{{^isExplode}}queryParams.putAll(apiClient.parameterToMultiValueMap({{#collectionFormat}}ApiClient.CollectionFormat.valueOf("{{{.}}}".toUpperCase(Locale.ROOT)){{/collectionFormat}}{{^collectionFormat}}null{{/collectionFormat}}, "{{baseName}}", {{paramName}}));
98+
{{/isExplode}}{{/queryParams}}{{/hasQueryParams}}{{#hasHeaderParams}}
10099

101100
{{#headerParams}}
102101
if ({{paramName}} != null)

modules/openapi-generator/src/test/java/org/openapitools/codegen/java/JavaClientCodegenTest.java

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2272,6 +2272,30 @@ public void shouldProperlyExplodeRestTemplateQueryParameters_issue907() {
22722272
+ " objectParam.getSomeInteger()));");
22732273
}
22742274

2275+
@Test
2276+
public void shouldProperlyExplodeWebClientQueryParameters() {
2277+
final Map<String, File> files = generateFromContract(
2278+
"src/test/resources/3_0/java/explode-query-parameter.yaml",
2279+
JavaClientCodegen.WEBCLIENT
2280+
);
2281+
2282+
JavaFileAssert.assertThat(files.get("DefaultApi.java"))
2283+
.printFileContent()
2284+
.assertMethod("searchRequestCreation")
2285+
.bodyContainsLines(
2286+
"queryParams.putAll(apiClient.parameterToMultiValueMap(null, \"regular-param\","
2287+
+ " regularParam));")
2288+
.bodyContainsLines(
2289+
"queryParams.putAll(apiClient.parameterToMultiValueMap(null, \"someString\","
2290+
+ " objectParam.getSomeString()));")
2291+
.bodyContainsLines(
2292+
"queryParams.putAll(apiClient.parameterToMultiValueMap(null, \"someBoolean\","
2293+
+ " objectParam.getSomeBoolean()));")
2294+
.bodyContainsLines(
2295+
"queryParams.putAll(apiClient.parameterToMultiValueMap(null, \"someInteger\","
2296+
+ " objectParam.getSomeInteger()));");
2297+
}
2298+
22752299
private static Map<String, File> generateFromContract(final String pathToSpecification, final String library) {
22762300
return generateFromContract(pathToSpecification, library, new HashMap<>());
22772301
}

samples/client/petstore/java/webclient-jakarta/src/main/java/org/openapitools/client/api/FakeApi.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -212,6 +212,7 @@ private ResponseSpec fakeHttpSignatureTestRequestCreation(Pet pet, String query1
212212
final MultiValueMap<String, Object> formParams = new LinkedMultiValueMap<String, Object>();
213213

214214
queryParams.putAll(apiClient.parameterToMultiValueMap(null, "query_1", query1));
215+
215216

216217
if (header1 != null)
217218
headerParams.add("header_1", apiClient.parameterToString(header1));
@@ -788,7 +789,7 @@ private ResponseSpec testBodyWithQueryParamsRequestCreation(String query, User u
788789
final MultiValueMap<String, Object> formParams = new LinkedMultiValueMap<String, Object>();
789790

790791
queryParams.putAll(apiClient.parameterToMultiValueMap(null, "query", query));
791-
792+
792793
final String[] localVarAccepts = { };
793794
final List<MediaType> localVarAccept = apiClient.selectHeaderAccept(localVarAccepts);
794795
final String[] localVarContentTypes = {
@@ -1111,6 +1112,7 @@ private ResponseSpec testEnumParametersRequestCreation(List<String> enumHeaderSt
11111112
queryParams.putAll(apiClient.parameterToMultiValueMap(null, "enum_query_integer", enumQueryInteger));
11121113
queryParams.putAll(apiClient.parameterToMultiValueMap(null, "enum_query_double", enumQueryDouble));
11131114
queryParams.putAll(apiClient.parameterToMultiValueMap(ApiClient.CollectionFormat.valueOf("multi".toUpperCase(Locale.ROOT)), "enum_query_model_array", enumQueryModelArray));
1115+
11141116

11151117
if (enumHeaderStringArray != null)
11161118
headerParams.add("enum_header_string_array", apiClient.parameterToString(enumHeaderStringArray));
@@ -1234,6 +1236,7 @@ private ResponseSpec testGroupParametersRequestCreation(Integer requiredStringGr
12341236
queryParams.putAll(apiClient.parameterToMultiValueMap(null, "required_int64_group", requiredInt64Group));
12351237
queryParams.putAll(apiClient.parameterToMultiValueMap(null, "string_group", stringGroup));
12361238
queryParams.putAll(apiClient.parameterToMultiValueMap(null, "int64_group", int64Group));
1239+
12371240

12381241
if (requiredBooleanGroup != null)
12391242
headerParams.add("required_boolean_group", apiClient.parameterToString(requiredBooleanGroup));
@@ -1643,7 +1646,7 @@ private ResponseSpec testQueryParameterCollectionFormatRequestCreation(List<Stri
16431646
queryParams.putAll(apiClient.parameterToMultiValueMap(ApiClient.CollectionFormat.valueOf("multi".toUpperCase(Locale.ROOT)), "context", context));
16441647
queryParams.putAll(apiClient.parameterToMultiValueMap(null, "language", language));
16451648
queryParams.putAll(apiClient.parameterToMultiValueMap(null, "allowEmpty", allowEmpty));
1646-
1649+
16471650
final String[] localVarAccepts = { };
16481651
final List<MediaType> localVarAccept = apiClient.selectHeaderAccept(localVarAccepts);
16491652
final String[] localVarContentTypes = { };

samples/client/petstore/java/webclient-jakarta/src/main/java/org/openapitools/client/api/PetApi.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,7 @@ private ResponseSpec deletePetRequestCreation(Long petId, String apiKey) throws
147147
final MultiValueMap<String, String> cookieParams = new LinkedMultiValueMap<String, String>();
148148
final MultiValueMap<String, Object> formParams = new LinkedMultiValueMap<String, Object>();
149149

150+
150151
if (apiKey != null)
151152
headerParams.add("api_key", apiClient.parameterToString(apiKey));
152153
final String[] localVarAccepts = { };
@@ -225,7 +226,7 @@ private ResponseSpec findPetsByStatusRequestCreation(List<String> status) throws
225226
final MultiValueMap<String, Object> formParams = new LinkedMultiValueMap<String, Object>();
226227

227228
queryParams.putAll(apiClient.parameterToMultiValueMap(ApiClient.CollectionFormat.valueOf("csv".toUpperCase(Locale.ROOT)), "status", status));
228-
229+
229230
final String[] localVarAccepts = {
230231
"application/xml", "application/json"
231232
};
@@ -305,7 +306,7 @@ private ResponseSpec findPetsByTagsRequestCreation(Set<String> tags) throws WebC
305306
final MultiValueMap<String, Object> formParams = new LinkedMultiValueMap<String, Object>();
306307

307308
queryParams.putAll(apiClient.parameterToMultiValueMap(ApiClient.CollectionFormat.valueOf("csv".toUpperCase(Locale.ROOT)), "tags", tags));
308-
309+
309310
final String[] localVarAccepts = {
310311
"application/xml", "application/json"
311312
};

samples/client/petstore/java/webclient-jakarta/src/main/java/org/openapitools/client/api/UserApi.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -439,7 +439,7 @@ private ResponseSpec loginUserRequestCreation(String username, String password)
439439

440440
queryParams.putAll(apiClient.parameterToMultiValueMap(null, "username", username));
441441
queryParams.putAll(apiClient.parameterToMultiValueMap(null, "password", password));
442-
442+
443443
final String[] localVarAccepts = {
444444
"application/xml", "application/json"
445445
};

samples/client/petstore/java/webclient-swagger2/src/main/java/org/openapitools/client/api/FakeApi.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -212,6 +212,7 @@ private ResponseSpec fakeHttpSignatureTestRequestCreation(Pet pet, String query1
212212
final MultiValueMap<String, Object> formParams = new LinkedMultiValueMap<String, Object>();
213213

214214
queryParams.putAll(apiClient.parameterToMultiValueMap(null, "query_1", query1));
215+
215216

216217
if (header1 != null)
217218
headerParams.add("header_1", apiClient.parameterToString(header1));
@@ -788,7 +789,7 @@ private ResponseSpec testBodyWithQueryParamsRequestCreation(String query, User u
788789
final MultiValueMap<String, Object> formParams = new LinkedMultiValueMap<String, Object>();
789790

790791
queryParams.putAll(apiClient.parameterToMultiValueMap(null, "query", query));
791-
792+
792793
final String[] localVarAccepts = { };
793794
final List<MediaType> localVarAccept = apiClient.selectHeaderAccept(localVarAccepts);
794795
final String[] localVarContentTypes = {
@@ -1111,6 +1112,7 @@ private ResponseSpec testEnumParametersRequestCreation(List<String> enumHeaderSt
11111112
queryParams.putAll(apiClient.parameterToMultiValueMap(null, "enum_query_integer", enumQueryInteger));
11121113
queryParams.putAll(apiClient.parameterToMultiValueMap(null, "enum_query_double", enumQueryDouble));
11131114
queryParams.putAll(apiClient.parameterToMultiValueMap(ApiClient.CollectionFormat.valueOf("multi".toUpperCase(Locale.ROOT)), "enum_query_model_array", enumQueryModelArray));
1115+
11141116

11151117
if (enumHeaderStringArray != null)
11161118
headerParams.add("enum_header_string_array", apiClient.parameterToString(enumHeaderStringArray));
@@ -1234,6 +1236,7 @@ private ResponseSpec testGroupParametersRequestCreation(Integer requiredStringGr
12341236
queryParams.putAll(apiClient.parameterToMultiValueMap(null, "required_int64_group", requiredInt64Group));
12351237
queryParams.putAll(apiClient.parameterToMultiValueMap(null, "string_group", stringGroup));
12361238
queryParams.putAll(apiClient.parameterToMultiValueMap(null, "int64_group", int64Group));
1239+
12371240

12381241
if (requiredBooleanGroup != null)
12391242
headerParams.add("required_boolean_group", apiClient.parameterToString(requiredBooleanGroup));
@@ -1643,7 +1646,7 @@ private ResponseSpec testQueryParameterCollectionFormatRequestCreation(List<Stri
16431646
queryParams.putAll(apiClient.parameterToMultiValueMap(ApiClient.CollectionFormat.valueOf("multi".toUpperCase(Locale.ROOT)), "context", context));
16441647
queryParams.putAll(apiClient.parameterToMultiValueMap(null, "language", language));
16451648
queryParams.putAll(apiClient.parameterToMultiValueMap(null, "allowEmpty", allowEmpty));
1646-
1649+
16471650
final String[] localVarAccepts = { };
16481651
final List<MediaType> localVarAccept = apiClient.selectHeaderAccept(localVarAccepts);
16491652
final String[] localVarContentTypes = { };

samples/client/petstore/java/webclient-swagger2/src/main/java/org/openapitools/client/api/PetApi.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,7 @@ private ResponseSpec deletePetRequestCreation(Long petId, String apiKey) throws
147147
final MultiValueMap<String, String> cookieParams = new LinkedMultiValueMap<String, String>();
148148
final MultiValueMap<String, Object> formParams = new LinkedMultiValueMap<String, Object>();
149149

150+
150151
if (apiKey != null)
151152
headerParams.add("api_key", apiClient.parameterToString(apiKey));
152153
final String[] localVarAccepts = { };
@@ -225,7 +226,7 @@ private ResponseSpec findPetsByStatusRequestCreation(List<String> status) throws
225226
final MultiValueMap<String, Object> formParams = new LinkedMultiValueMap<String, Object>();
226227

227228
queryParams.putAll(apiClient.parameterToMultiValueMap(ApiClient.CollectionFormat.valueOf("csv".toUpperCase(Locale.ROOT)), "status", status));
228-
229+
229230
final String[] localVarAccepts = {
230231
"application/xml", "application/json"
231232
};
@@ -305,7 +306,7 @@ private ResponseSpec findPetsByTagsRequestCreation(Set<String> tags) throws WebC
305306
final MultiValueMap<String, Object> formParams = new LinkedMultiValueMap<String, Object>();
306307

307308
queryParams.putAll(apiClient.parameterToMultiValueMap(ApiClient.CollectionFormat.valueOf("csv".toUpperCase(Locale.ROOT)), "tags", tags));
308-
309+
309310
final String[] localVarAccepts = {
310311
"application/xml", "application/json"
311312
};

samples/client/petstore/java/webclient-swagger2/src/main/java/org/openapitools/client/api/UserApi.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -439,7 +439,7 @@ private ResponseSpec loginUserRequestCreation(String username, String password)
439439

440440
queryParams.putAll(apiClient.parameterToMultiValueMap(null, "username", username));
441441
queryParams.putAll(apiClient.parameterToMultiValueMap(null, "password", password));
442-
442+
443443
final String[] localVarAccepts = {
444444
"application/xml", "application/json"
445445
};

samples/client/petstore/java/webclient/src/main/java/org/openapitools/client/api/FakeApi.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -212,6 +212,7 @@ private ResponseSpec fakeHttpSignatureTestRequestCreation(Pet pet, String query1
212212
final MultiValueMap<String, Object> formParams = new LinkedMultiValueMap<String, Object>();
213213

214214
queryParams.putAll(apiClient.parameterToMultiValueMap(null, "query_1", query1));
215+
215216

216217
if (header1 != null)
217218
headerParams.add("header_1", apiClient.parameterToString(header1));
@@ -788,7 +789,7 @@ private ResponseSpec testBodyWithQueryParamsRequestCreation(String query, User u
788789
final MultiValueMap<String, Object> formParams = new LinkedMultiValueMap<String, Object>();
789790

790791
queryParams.putAll(apiClient.parameterToMultiValueMap(null, "query", query));
791-
792+
792793
final String[] localVarAccepts = { };
793794
final List<MediaType> localVarAccept = apiClient.selectHeaderAccept(localVarAccepts);
794795
final String[] localVarContentTypes = {
@@ -1111,6 +1112,7 @@ private ResponseSpec testEnumParametersRequestCreation(List<String> enumHeaderSt
11111112
queryParams.putAll(apiClient.parameterToMultiValueMap(null, "enum_query_integer", enumQueryInteger));
11121113
queryParams.putAll(apiClient.parameterToMultiValueMap(null, "enum_query_double", enumQueryDouble));
11131114
queryParams.putAll(apiClient.parameterToMultiValueMap(ApiClient.CollectionFormat.valueOf("multi".toUpperCase(Locale.ROOT)), "enum_query_model_array", enumQueryModelArray));
1115+
11141116

11151117
if (enumHeaderStringArray != null)
11161118
headerParams.add("enum_header_string_array", apiClient.parameterToString(enumHeaderStringArray));
@@ -1234,6 +1236,7 @@ private ResponseSpec testGroupParametersRequestCreation(Integer requiredStringGr
12341236
queryParams.putAll(apiClient.parameterToMultiValueMap(null, "required_int64_group", requiredInt64Group));
12351237
queryParams.putAll(apiClient.parameterToMultiValueMap(null, "string_group", stringGroup));
12361238
queryParams.putAll(apiClient.parameterToMultiValueMap(null, "int64_group", int64Group));
1239+
12371240

12381241
if (requiredBooleanGroup != null)
12391242
headerParams.add("required_boolean_group", apiClient.parameterToString(requiredBooleanGroup));
@@ -1643,7 +1646,7 @@ private ResponseSpec testQueryParameterCollectionFormatRequestCreation(List<Stri
16431646
queryParams.putAll(apiClient.parameterToMultiValueMap(ApiClient.CollectionFormat.valueOf("multi".toUpperCase(Locale.ROOT)), "context", context));
16441647
queryParams.putAll(apiClient.parameterToMultiValueMap(null, "language", language));
16451648
queryParams.putAll(apiClient.parameterToMultiValueMap(null, "allowEmpty", allowEmpty));
1646-
1649+
16471650
final String[] localVarAccepts = { };
16481651
final List<MediaType> localVarAccept = apiClient.selectHeaderAccept(localVarAccepts);
16491652
final String[] localVarContentTypes = { };

samples/client/petstore/java/webclient/src/main/java/org/openapitools/client/api/PetApi.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,7 @@ private ResponseSpec deletePetRequestCreation(Long petId, String apiKey) throws
147147
final MultiValueMap<String, String> cookieParams = new LinkedMultiValueMap<String, String>();
148148
final MultiValueMap<String, Object> formParams = new LinkedMultiValueMap<String, Object>();
149149

150+
150151
if (apiKey != null)
151152
headerParams.add("api_key", apiClient.parameterToString(apiKey));
152153
final String[] localVarAccepts = { };
@@ -225,7 +226,7 @@ private ResponseSpec findPetsByStatusRequestCreation(List<String> status) throws
225226
final MultiValueMap<String, Object> formParams = new LinkedMultiValueMap<String, Object>();
226227

227228
queryParams.putAll(apiClient.parameterToMultiValueMap(ApiClient.CollectionFormat.valueOf("csv".toUpperCase(Locale.ROOT)), "status", status));
228-
229+
229230
final String[] localVarAccepts = {
230231
"application/xml", "application/json"
231232
};
@@ -305,7 +306,7 @@ private ResponseSpec findPetsByTagsRequestCreation(Set<String> tags) throws WebC
305306
final MultiValueMap<String, Object> formParams = new LinkedMultiValueMap<String, Object>();
306307

307308
queryParams.putAll(apiClient.parameterToMultiValueMap(ApiClient.CollectionFormat.valueOf("csv".toUpperCase(Locale.ROOT)), "tags", tags));
308-
309+
309310
final String[] localVarAccepts = {
310311
"application/xml", "application/json"
311312
};

0 commit comments

Comments
 (0)