From d8d9744154023a4aa045b78adf104402d1d39e01 Mon Sep 17 00:00:00 2001 From: Ihar Hrachyshka Date: Sat, 27 Sep 2025 02:16:53 -0400 Subject: [PATCH] go: Fix missing imports for optional body params. (#22014) Previous mustache template was using #isBodyParam outside of #operation context, so it was not effective. Even if we'd add the proper context, we'd then risk generating duplicate imports for multiple matching parameters. For this reason, this patch implements detection of an optional body parameter in code, making sure the corresponding import is added just once. Fixes #19237 --- .../java/org/openapitools/codegen/CodegenOperation.java | 9 +++++++++ .../openapitools/codegen/languages/GoServerCodegen.java | 5 +++++ .../src/main/resources/go-server/controller-api.mustache | 6 ++---- 3 files changed, 16 insertions(+), 4 deletions(-) diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenOperation.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenOperation.java index d204fe4246a..9dca0e0e048 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenOperation.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenOperation.java @@ -115,6 +115,15 @@ public class CodegenOperation { return nonEmpty(bodyParams); } + /** + * Check if there's at least one optional body parameter + * + * @return true if optional body parameter exists, false otherwise + */ + public boolean getHasOptionalBodyParam() { + return nonEmpty(bodyParams) && nonEmpty(optionalParams) && bodyParams.stream().anyMatch(optionalParams::contains); + } + /** * Check if there's at least one query parameter * diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/GoServerCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/GoServerCodegen.java index 54b0292fc30..fbec5932724 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/GoServerCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/GoServerCodegen.java @@ -410,6 +410,7 @@ public class GoServerCodegen extends AbstractGoCodegen { private void addConditionalImportInformation(OperationsMap operations) { boolean hasPathParams = false; boolean hasBodyParams = false; + boolean hasOptionalBodyParams = false; for (CodegenOperation op : operations.getOperations().getOperation()) { if (op.getHasPathParams()) { @@ -418,10 +419,14 @@ public class GoServerCodegen extends AbstractGoCodegen { if (op.getHasBodyParam()) { hasBodyParams = true; } + if (op.getHasOptionalBodyParam()) { + hasOptionalBodyParams = true; + } } additionalProperties.put("hasPathParams", hasPathParams); additionalProperties.put("hasBodyParams", hasBodyParams); + additionalProperties.put("hasOptionalBodyParams", hasOptionalBodyParams); } diff --git a/modules/openapi-generator/src/main/resources/go-server/controller-api.mustache b/modules/openapi-generator/src/main/resources/go-server/controller-api.mustache index 309405baab6..b390633971a 100644 --- a/modules/openapi-generator/src/main/resources/go-server/controller-api.mustache +++ b/modules/openapi-generator/src/main/resources/go-server/controller-api.mustache @@ -6,12 +6,10 @@ import ( {{#hasBodyParams}} "encoding/json" {{/hasBodyParams}} - {{#isBodyParam}} - {{^required}} + {{#hasOptionalBodyParams}} "errors" "io" - {{/required}} - {{/isBodyParam}} + {{/hasOptionalBodyParams}} "net/http" "strings" {{#imports}} "{{import}}"