From 728abafdfa867b67348001afa018cf7f102085d9 Mon Sep 17 00:00:00 2001 From: Marcel Huber <167767072+marcel-huber-ptv@users.noreply.github.com> Date: Sun, 26 May 2024 09:54:58 +0200 Subject: [PATCH] [Java][native] Fix: empty deepObject can produce invalid query [fix #18736] (#18737) * fix empty query parameter string * update samples --- .../main/resources/Java/libraries/native/api.mustache | 5 ++++- .../codegen/java/JavaClientDeepObjectTest.java | 2 +- .../java/org/openapitools/client/api/QueryApi.java | 10 ++++++++-- 3 files changed, 13 insertions(+), 4 deletions(-) diff --git a/modules/openapi-generator/src/main/resources/Java/libraries/native/api.mustache b/modules/openapi-generator/src/main/resources/Java/libraries/native/api.mustache index 3ff74606b75a..a80dcbac8d6d 100644 --- a/modules/openapi-generator/src/main/resources/Java/libraries/native/api.mustache +++ b/modules/openapi-generator/src/main/resources/Java/libraries/native/api.mustache @@ -372,7 +372,10 @@ public class {{classname}} { } {{/isArray}} {{^isArray}} - localVarQueryStringJoiner.add({{paramName}}.toUrlQueryString("{{baseName}}")); + String queryString = {{paramName}}.toUrlQueryString("{{baseName}}"); + if (!queryString.isBlank()) { + localVarQueryStringJoiner.add(queryString); + } {{/isArray}} } {{/isDeepObject}} diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/JavaClientDeepObjectTest.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/JavaClientDeepObjectTest.java index 2c6197e8dcc4..b3bcd53ef60a 100644 --- a/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/JavaClientDeepObjectTest.java +++ b/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/JavaClientDeepObjectTest.java @@ -59,6 +59,6 @@ public void deepObject() throws IOException { assertFileContains(Paths.get(outputPath + "/src/main/java/org/openapitools/client/api/DefaultApi.java"), "options.toUrlQueryString(\"options\")", - "inputOptions.toUrlQueryString(\"inputOptions\"))"); + "inputOptions.toUrlQueryString(\"inputOptions\")"); } } diff --git a/samples/client/echo_api/java/native/src/main/java/org/openapitools/client/api/QueryApi.java b/samples/client/echo_api/java/native/src/main/java/org/openapitools/client/api/QueryApi.java index c67165826e2c..c596b6216752 100644 --- a/samples/client/echo_api/java/native/src/main/java/org/openapitools/client/api/QueryApi.java +++ b/samples/client/echo_api/java/native/src/main/java/org/openapitools/client/api/QueryApi.java @@ -453,7 +453,10 @@ private HttpRequest.Builder testQueryStyleDeepObjectExplodeTrueObjectRequestBuil String localVarQueryParameterBaseName; localVarQueryParameterBaseName = "query_object"; if (queryObject != null) { - localVarQueryStringJoiner.add(queryObject.toUrlQueryString("query_object")); + String queryString = queryObject.toUrlQueryString("query_object"); + if (!queryString.isBlank()) { + localVarQueryStringJoiner.add(queryString); + } } if (!localVarQueryParams.isEmpty() || localVarQueryStringJoiner.length() != 0) { @@ -546,7 +549,10 @@ private HttpRequest.Builder testQueryStyleDeepObjectExplodeTrueObjectAllOfReques String localVarQueryParameterBaseName; localVarQueryParameterBaseName = "query_object"; if (queryObject != null) { - localVarQueryStringJoiner.add(queryObject.toUrlQueryString("query_object")); + String queryString = queryObject.toUrlQueryString("query_object"); + if (!queryString.isBlank()) { + localVarQueryStringJoiner.add(queryString); + } } if (!localVarQueryParams.isEmpty() || localVarQueryStringJoiner.length() != 0) {