From 06ba8317f9714fb303b5d48c8317359681d3e7f1 Mon Sep 17 00:00:00 2001 From: Jorge Rodriguez Date: Wed, 4 Dec 2019 03:06:42 +0100 Subject: [PATCH] Error in the reactive client when the path variables are a list (#4687) (#4689) * Error in the reactive client when the path variables are a list (#4687) * Update samples (#4687) --- .../libraries/webclient/ApiClient.mustache | 24 ++++++++++++++++++- .../Java/libraries/webclient/api.mustache | 3 ++- .../org/openapitools/client/ApiClient.java | 24 ++++++++++++++++++- .../client/api/AnotherFakeApi.java | 1 + .../org/openapitools/client/api/FakeApi.java | 14 +++++++++++ .../client/api/FakeClassnameTags123Api.java | 1 + .../org/openapitools/client/api/PetApi.java | 9 +++++++ .../org/openapitools/client/api/StoreApi.java | 4 ++++ .../org/openapitools/client/api/UserApi.java | 8 +++++++ 9 files changed, 85 insertions(+), 3 deletions(-) diff --git a/modules/openapi-generator/src/main/resources/Java/libraries/webclient/ApiClient.mustache b/modules/openapi-generator/src/main/resources/Java/libraries/webclient/ApiClient.mustache index 013ab6dc0e5c..e21f3847641f 100644 --- a/modules/openapi-generator/src/main/resources/Java/libraries/webclient/ApiClient.mustache +++ b/modules/openapi-generator/src/main/resources/Java/libraries/webclient/ApiClient.mustache @@ -497,7 +497,7 @@ public class ApiClient { formParams .toSingleValueMap() .entrySet() - .forEach(es -> map.add(es.getKey(), (String) es.getValue())); + .forEach(es -> map.add(es.getKey(), String.valueOf(es.getValue()))); return BodyInserters.fromFormData(map); } else if(MediaType.MULTIPART_FORM_DATA.equals(contentType)) { @@ -638,6 +638,28 @@ public class ApiClient { } } + /** + * Formats the specified collection path parameter to a string value. + * + * @param collectionFormat The collection format of the parameter. + * @param values The values of the parameter. + * @return String representation of the parameter + */ + public String collectionPathParameterToString(CollectionFormat collectionFormat, Collection values) { + // create the value based on the collection format + if (CollectionFormat.MULTI.equals(collectionFormat)) { + // not valid for path params + return parameterToString(values); + } + + // collectionFormat is assumed to be "csv" by default + if(collectionFormat == null) { + collectionFormat = CollectionFormat.CSV; + } + + return collectionFormat.collectionToString(values); + } + private class ApiClientHttpRequestInterceptor implements ClientHttpRequestInterceptor { private final Log log = LogFactory.getLog(ApiClientHttpRequestInterceptor.class); diff --git a/modules/openapi-generator/src/main/resources/Java/libraries/webclient/api.mustache b/modules/openapi-generator/src/main/resources/Java/libraries/webclient/api.mustache index 96066577b0e5..9138d7d2e7ab 100644 --- a/modules/openapi-generator/src/main/resources/Java/libraries/webclient/api.mustache +++ b/modules/openapi-generator/src/main/resources/Java/libraries/webclient/api.mustache @@ -70,7 +70,8 @@ public class {{classname}} { {{/required}}{{/allParams}} // create path and map variables final Map pathParams = new HashMap();{{#hasPathParams}}{{#pathParams}} - pathParams.put("{{baseName}}", {{{paramName}}});{{/pathParams}}{{/hasPathParams}} + pathParams.put("{{baseName}}", {{#collectionFormat}}apiClient.collectionPathParameterToString(ApiClient.CollectionFormat.valueOf("csv".toUpperCase()), {{/collectionFormat}}{{{paramName}}}{{#collectionFormat}}){{/collectionFormat}});{{/pathParams}}{{/hasPathParams}} + final MultiValueMap queryParams = new LinkedMultiValueMap(); final HttpHeaders headerParams = new HttpHeaders(); diff --git a/samples/client/petstore/java/webclient/src/main/java/org/openapitools/client/ApiClient.java b/samples/client/petstore/java/webclient/src/main/java/org/openapitools/client/ApiClient.java index 776694a8b878..6ace9f2a1824 100644 --- a/samples/client/petstore/java/webclient/src/main/java/org/openapitools/client/ApiClient.java +++ b/samples/client/petstore/java/webclient/src/main/java/org/openapitools/client/ApiClient.java @@ -493,7 +493,7 @@ public class ApiClient { formParams .toSingleValueMap() .entrySet() - .forEach(es -> map.add(es.getKey(), (String) es.getValue())); + .forEach(es -> map.add(es.getKey(), String.valueOf(es.getValue()))); return BodyInserters.fromFormData(map); } else if(MediaType.MULTIPART_FORM_DATA.equals(contentType)) { @@ -634,6 +634,28 @@ public class ApiClient { } } + /** + * Formats the specified collection path parameter to a string value. + * + * @param collectionFormat The collection format of the parameter. + * @param values The values of the parameter. + * @return String representation of the parameter + */ + public String collectionPathParameterToString(CollectionFormat collectionFormat, Collection values) { + // create the value based on the collection format + if (CollectionFormat.MULTI.equals(collectionFormat)) { + // not valid for path params + return parameterToString(values); + } + + // collectionFormat is assumed to be "csv" by default + if(collectionFormat == null) { + collectionFormat = CollectionFormat.CSV; + } + + return collectionFormat.collectionToString(values); + } + private class ApiClientHttpRequestInterceptor implements ClientHttpRequestInterceptor { private final Log log = LogFactory.getLog(ApiClientHttpRequestInterceptor.class); diff --git a/samples/client/petstore/java/webclient/src/main/java/org/openapitools/client/api/AnotherFakeApi.java b/samples/client/petstore/java/webclient/src/main/java/org/openapitools/client/api/AnotherFakeApi.java index 202d239489f1..1b7f76e019bd 100644 --- a/samples/client/petstore/java/webclient/src/main/java/org/openapitools/client/api/AnotherFakeApi.java +++ b/samples/client/petstore/java/webclient/src/main/java/org/openapitools/client/api/AnotherFakeApi.java @@ -64,6 +64,7 @@ public class AnotherFakeApi { // create path and map variables final Map pathParams = new HashMap(); + final MultiValueMap queryParams = new LinkedMultiValueMap(); final HttpHeaders headerParams = new HttpHeaders(); final MultiValueMap cookieParams = new LinkedMultiValueMap(); diff --git a/samples/client/petstore/java/webclient/src/main/java/org/openapitools/client/api/FakeApi.java b/samples/client/petstore/java/webclient/src/main/java/org/openapitools/client/api/FakeApi.java index 25423c5bb272..fcbe10439e96 100644 --- a/samples/client/petstore/java/webclient/src/main/java/org/openapitools/client/api/FakeApi.java +++ b/samples/client/petstore/java/webclient/src/main/java/org/openapitools/client/api/FakeApi.java @@ -71,6 +71,7 @@ public class FakeApi { // create path and map variables final Map pathParams = new HashMap(); + final MultiValueMap queryParams = new LinkedMultiValueMap(); final HttpHeaders headerParams = new HttpHeaders(); final MultiValueMap cookieParams = new LinkedMultiValueMap(); @@ -102,6 +103,7 @@ public class FakeApi { // create path and map variables final Map pathParams = new HashMap(); + final MultiValueMap queryParams = new LinkedMultiValueMap(); final HttpHeaders headerParams = new HttpHeaders(); final MultiValueMap cookieParams = new LinkedMultiValueMap(); @@ -133,6 +135,7 @@ public class FakeApi { // create path and map variables final Map pathParams = new HashMap(); + final MultiValueMap queryParams = new LinkedMultiValueMap(); final HttpHeaders headerParams = new HttpHeaders(); final MultiValueMap cookieParams = new LinkedMultiValueMap(); @@ -164,6 +167,7 @@ public class FakeApi { // create path and map variables final Map pathParams = new HashMap(); + final MultiValueMap queryParams = new LinkedMultiValueMap(); final HttpHeaders headerParams = new HttpHeaders(); final MultiValueMap cookieParams = new LinkedMultiValueMap(); @@ -195,6 +199,7 @@ public class FakeApi { // create path and map variables final Map pathParams = new HashMap(); + final MultiValueMap queryParams = new LinkedMultiValueMap(); final HttpHeaders headerParams = new HttpHeaders(); final MultiValueMap cookieParams = new LinkedMultiValueMap(); @@ -230,6 +235,7 @@ public class FakeApi { // create path and map variables final Map pathParams = new HashMap(); + final MultiValueMap queryParams = new LinkedMultiValueMap(); final HttpHeaders headerParams = new HttpHeaders(); final MultiValueMap cookieParams = new LinkedMultiValueMap(); @@ -271,6 +277,7 @@ public class FakeApi { // create path and map variables final Map pathParams = new HashMap(); + final MultiValueMap queryParams = new LinkedMultiValueMap(); final HttpHeaders headerParams = new HttpHeaders(); final MultiValueMap cookieParams = new LinkedMultiValueMap(); @@ -309,6 +316,7 @@ public class FakeApi { // create path and map variables final Map pathParams = new HashMap(); + final MultiValueMap queryParams = new LinkedMultiValueMap(); final HttpHeaders headerParams = new HttpHeaders(); final MultiValueMap cookieParams = new LinkedMultiValueMap(); @@ -375,6 +383,7 @@ public class FakeApi { // create path and map variables final Map pathParams = new HashMap(); + final MultiValueMap queryParams = new LinkedMultiValueMap(); final HttpHeaders headerParams = new HttpHeaders(); final MultiValueMap cookieParams = new LinkedMultiValueMap(); @@ -442,6 +451,7 @@ public class FakeApi { // create path and map variables final Map pathParams = new HashMap(); + final MultiValueMap queryParams = new LinkedMultiValueMap(); final HttpHeaders headerParams = new HttpHeaders(); final MultiValueMap cookieParams = new LinkedMultiValueMap(); @@ -507,6 +517,7 @@ public class FakeApi { // create path and map variables final Map pathParams = new HashMap(); + final MultiValueMap queryParams = new LinkedMultiValueMap(); final HttpHeaders headerParams = new HttpHeaders(); final MultiValueMap cookieParams = new LinkedMultiValueMap(); @@ -550,6 +561,7 @@ public class FakeApi { // create path and map variables final Map pathParams = new HashMap(); + final MultiValueMap queryParams = new LinkedMultiValueMap(); final HttpHeaders headerParams = new HttpHeaders(); final MultiValueMap cookieParams = new LinkedMultiValueMap(); @@ -591,6 +603,7 @@ public class FakeApi { // create path and map variables final Map pathParams = new HashMap(); + final MultiValueMap queryParams = new LinkedMultiValueMap(); final HttpHeaders headerParams = new HttpHeaders(); final MultiValueMap cookieParams = new LinkedMultiValueMap(); @@ -655,6 +668,7 @@ public class FakeApi { // create path and map variables final Map pathParams = new HashMap(); + final MultiValueMap queryParams = new LinkedMultiValueMap(); final HttpHeaders headerParams = new HttpHeaders(); final MultiValueMap cookieParams = new LinkedMultiValueMap(); diff --git a/samples/client/petstore/java/webclient/src/main/java/org/openapitools/client/api/FakeClassnameTags123Api.java b/samples/client/petstore/java/webclient/src/main/java/org/openapitools/client/api/FakeClassnameTags123Api.java index b6f694ab5f39..35c54dd0fc67 100644 --- a/samples/client/petstore/java/webclient/src/main/java/org/openapitools/client/api/FakeClassnameTags123Api.java +++ b/samples/client/petstore/java/webclient/src/main/java/org/openapitools/client/api/FakeClassnameTags123Api.java @@ -64,6 +64,7 @@ public class FakeClassnameTags123Api { // create path and map variables final Map pathParams = new HashMap(); + final MultiValueMap queryParams = new LinkedMultiValueMap(); final HttpHeaders headerParams = new HttpHeaders(); final MultiValueMap cookieParams = new LinkedMultiValueMap(); diff --git a/samples/client/petstore/java/webclient/src/main/java/org/openapitools/client/api/PetApi.java b/samples/client/petstore/java/webclient/src/main/java/org/openapitools/client/api/PetApi.java index d1b34d105c22..079890b3a06c 100644 --- a/samples/client/petstore/java/webclient/src/main/java/org/openapitools/client/api/PetApi.java +++ b/samples/client/petstore/java/webclient/src/main/java/org/openapitools/client/api/PetApi.java @@ -66,6 +66,7 @@ public class PetApi { // create path and map variables final Map pathParams = new HashMap(); + final MultiValueMap queryParams = new LinkedMultiValueMap(); final HttpHeaders headerParams = new HttpHeaders(); final MultiValueMap cookieParams = new LinkedMultiValueMap(); @@ -104,6 +105,7 @@ public class PetApi { final Map pathParams = new HashMap(); pathParams.put("petId", petId); + final MultiValueMap queryParams = new LinkedMultiValueMap(); final HttpHeaders headerParams = new HttpHeaders(); final MultiValueMap cookieParams = new LinkedMultiValueMap(); @@ -142,6 +144,7 @@ public class PetApi { // create path and map variables final Map pathParams = new HashMap(); + final MultiValueMap queryParams = new LinkedMultiValueMap(); final HttpHeaders headerParams = new HttpHeaders(); final MultiValueMap cookieParams = new LinkedMultiValueMap(); @@ -181,6 +184,7 @@ public class PetApi { // create path and map variables final Map pathParams = new HashMap(); + final MultiValueMap queryParams = new LinkedMultiValueMap(); final HttpHeaders headerParams = new HttpHeaders(); final MultiValueMap cookieParams = new LinkedMultiValueMap(); @@ -222,6 +226,7 @@ public class PetApi { final Map pathParams = new HashMap(); pathParams.put("petId", petId); + final MultiValueMap queryParams = new LinkedMultiValueMap(); final HttpHeaders headerParams = new HttpHeaders(); final MultiValueMap cookieParams = new LinkedMultiValueMap(); @@ -260,6 +265,7 @@ public class PetApi { // create path and map variables final Map pathParams = new HashMap(); + final MultiValueMap queryParams = new LinkedMultiValueMap(); final HttpHeaders headerParams = new HttpHeaders(); final MultiValueMap cookieParams = new LinkedMultiValueMap(); @@ -298,6 +304,7 @@ public class PetApi { final Map pathParams = new HashMap(); pathParams.put("petId", petId); + final MultiValueMap queryParams = new LinkedMultiValueMap(); final HttpHeaders headerParams = new HttpHeaders(); final MultiValueMap cookieParams = new LinkedMultiValueMap(); @@ -342,6 +349,7 @@ public class PetApi { final Map pathParams = new HashMap(); pathParams.put("petId", petId); + final MultiValueMap queryParams = new LinkedMultiValueMap(); final HttpHeaders headerParams = new HttpHeaders(); final MultiValueMap cookieParams = new LinkedMultiValueMap(); @@ -393,6 +401,7 @@ public class PetApi { final Map pathParams = new HashMap(); pathParams.put("petId", petId); + final MultiValueMap queryParams = new LinkedMultiValueMap(); final HttpHeaders headerParams = new HttpHeaders(); final MultiValueMap cookieParams = new LinkedMultiValueMap(); diff --git a/samples/client/petstore/java/webclient/src/main/java/org/openapitools/client/api/StoreApi.java b/samples/client/petstore/java/webclient/src/main/java/org/openapitools/client/api/StoreApi.java index 364767217b6b..232dd361d2cd 100644 --- a/samples/client/petstore/java/webclient/src/main/java/org/openapitools/client/api/StoreApi.java +++ b/samples/client/petstore/java/webclient/src/main/java/org/openapitools/client/api/StoreApi.java @@ -65,6 +65,7 @@ public class StoreApi { final Map pathParams = new HashMap(); pathParams.put("order_id", orderId); + final MultiValueMap queryParams = new LinkedMultiValueMap(); final HttpHeaders headerParams = new HttpHeaders(); final MultiValueMap cookieParams = new LinkedMultiValueMap(); @@ -93,6 +94,7 @@ public class StoreApi { // create path and map variables final Map pathParams = new HashMap(); + final MultiValueMap queryParams = new LinkedMultiValueMap(); final HttpHeaders headerParams = new HttpHeaders(); final MultiValueMap cookieParams = new LinkedMultiValueMap(); @@ -132,6 +134,7 @@ public class StoreApi { final Map pathParams = new HashMap(); pathParams.put("order_id", orderId); + final MultiValueMap queryParams = new LinkedMultiValueMap(); final HttpHeaders headerParams = new HttpHeaders(); final MultiValueMap cookieParams = new LinkedMultiValueMap(); @@ -169,6 +172,7 @@ public class StoreApi { // create path and map variables final Map pathParams = new HashMap(); + final MultiValueMap queryParams = new LinkedMultiValueMap(); final HttpHeaders headerParams = new HttpHeaders(); final MultiValueMap cookieParams = new LinkedMultiValueMap(); diff --git a/samples/client/petstore/java/webclient/src/main/java/org/openapitools/client/api/UserApi.java b/samples/client/petstore/java/webclient/src/main/java/org/openapitools/client/api/UserApi.java index d884b800a38f..28023c26f310 100644 --- a/samples/client/petstore/java/webclient/src/main/java/org/openapitools/client/api/UserApi.java +++ b/samples/client/petstore/java/webclient/src/main/java/org/openapitools/client/api/UserApi.java @@ -63,6 +63,7 @@ public class UserApi { // create path and map variables final Map pathParams = new HashMap(); + final MultiValueMap queryParams = new LinkedMultiValueMap(); final HttpHeaders headerParams = new HttpHeaders(); final MultiValueMap cookieParams = new LinkedMultiValueMap(); @@ -96,6 +97,7 @@ public class UserApi { // create path and map variables final Map pathParams = new HashMap(); + final MultiValueMap queryParams = new LinkedMultiValueMap(); final HttpHeaders headerParams = new HttpHeaders(); final MultiValueMap cookieParams = new LinkedMultiValueMap(); @@ -129,6 +131,7 @@ public class UserApi { // create path and map variables final Map pathParams = new HashMap(); + final MultiValueMap queryParams = new LinkedMultiValueMap(); final HttpHeaders headerParams = new HttpHeaders(); final MultiValueMap cookieParams = new LinkedMultiValueMap(); @@ -164,6 +167,7 @@ public class UserApi { final Map pathParams = new HashMap(); pathParams.put("username", username); + final MultiValueMap queryParams = new LinkedMultiValueMap(); final HttpHeaders headerParams = new HttpHeaders(); final MultiValueMap cookieParams = new LinkedMultiValueMap(); @@ -201,6 +205,7 @@ public class UserApi { final Map pathParams = new HashMap(); pathParams.put("username", username); + final MultiValueMap queryParams = new LinkedMultiValueMap(); final HttpHeaders headerParams = new HttpHeaders(); final MultiValueMap cookieParams = new LinkedMultiValueMap(); @@ -244,6 +249,7 @@ public class UserApi { // create path and map variables final Map pathParams = new HashMap(); + final MultiValueMap queryParams = new LinkedMultiValueMap(); final HttpHeaders headerParams = new HttpHeaders(); final MultiValueMap cookieParams = new LinkedMultiValueMap(); @@ -276,6 +282,7 @@ public class UserApi { // create path and map variables final Map pathParams = new HashMap(); + final MultiValueMap queryParams = new LinkedMultiValueMap(); final HttpHeaders headerParams = new HttpHeaders(); final MultiValueMap cookieParams = new LinkedMultiValueMap(); @@ -317,6 +324,7 @@ public class UserApi { final Map pathParams = new HashMap(); pathParams.put("username", username); + final MultiValueMap queryParams = new LinkedMultiValueMap(); final HttpHeaders headerParams = new HttpHeaders(); final MultiValueMap cookieParams = new LinkedMultiValueMap();