From 0b652fe1d2e00aef9d0cf2ff9f841b3ae3418005 Mon Sep 17 00:00:00 2001 From: Yan Zhu Date: Tue, 21 Jul 2026 12:26:26 +0800 Subject: [PATCH] fix(go-server): avoid AssertstringRequired for primitive-typed models oneOf/nullable enums can flatten to *string while still flagged as models, so templates must not emit Assertstring* helpers that do not exist. Signed-off-by: Yan Zhu --- .../codegen/languages/GoServerCodegen.java | 42 +++++++++++++++++++ .../main/resources/go-server/model.mustache | 8 ++++ .../codegen/goserver/GoServerCodegenTest.java | 19 +++++++++ .../3_0/go-server/assert-primitive-model.yaml | 35 ++++++++++++++++ 4 files changed, 104 insertions(+) create mode 100644 modules/openapi-generator/src/test/resources/3_0/go-server/assert-primitive-model.yaml 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 9356bb7347f2..6e45e37ade46 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 @@ -341,6 +341,12 @@ private void configureModelRequiredValidation(CodegenModel model, List decodeVars = new ArrayList<>(decodeVarsByBaseName.values()); + for (CodegenProperty v : decodeVars) { + clearModelFlagForPrimitives(v); + } + for (CodegenProperty v : model.vars) { + clearModelFlagForPrimitives(v); + } model.vendorExtensions.put("decodeVars", decodeVars); List presenceCheckRequiredVars = decodeVars.stream() @@ -377,6 +383,42 @@ private void configureModelRequiredValidation(CodegenModel model, List files = generator.opts(configurator.toClientOptInput()).generate(); + files.forEach(File::deleteOnExit); + + java.nio.file.Path modelPath = Paths.get(output + "/go/model_thing.go"); + TestUtils.assertFileExists(modelPath); + TestUtils.assertFileNotContains(modelPath, "AssertstringRequired"); + TestUtils.assertFileNotContains(modelPath, "AssertstringConstraints"); + TestUtils.assertFileContains(modelPath, "func AssertThingRequired(obj Thing) error {\n\treturn nil"); + } + } diff --git a/modules/openapi-generator/src/test/resources/3_0/go-server/assert-primitive-model.yaml b/modules/openapi-generator/src/test/resources/3_0/go-server/assert-primitive-model.yaml new file mode 100644 index 000000000000..cf233c2e2944 --- /dev/null +++ b/modules/openapi-generator/src/test/resources/3_0/go-server/assert-primitive-model.yaml @@ -0,0 +1,35 @@ +openapi: 3.0.1 +info: + version: 1.0.0 + title: composed nullable enum must not emit primitive Assert helpers +paths: + /thing: + post: + operationId: createThing + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/Thing' + responses: + '201': + description: created +components: + schemas: + Mode: + type: string + enum: [On, Off] + Thing: + type: object + properties: + mode: + nullable: true + oneOf: + - $ref: '#/components/schemas/Mode' + - enum: [null] + tags: + type: array + items: + $ref: '#/components/schemas/Mode' + nullable: true