From c4a41aaacfe9b6cb6dea7b8f0474346037e905de Mon Sep 17 00:00:00 2001 From: Anupam Chaubey Date: Sun, 9 Aug 2026 22:38:34 +0530 Subject: [PATCH] fix(java-spring): expose requestBody named examples to Mustache template context (#23607) --- .../languages/AbstractJavaCodegen.java | 3 ++ .../java/spring/SpringCodegenTest.java | 34 ++++++++++++++++++ .../spring/requestbody_named_examples.yaml | 36 +++++++++++++++++++ 3 files changed, 73 insertions(+) create mode 100644 modules/openapi-generator/src/test/resources/3_0/spring/requestbody_named_examples.yaml diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractJavaCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractJavaCodegen.java index ec6d25ed5ff3..80530aa3956c 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractJavaCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractJavaCodegen.java @@ -1782,6 +1782,9 @@ public void setParameterExampleValue(CodegenParameter codegenParameter, RequestB } if (mediaType.getExamples() != null && !mediaType.getExamples().isEmpty()) { + // FIX for #23607: Assign all named examples to the parameter so Mustache templates can access them + codegenParameter.examples = mediaType.getExamples(); + Example example = mediaType.getExamples().values().iterator().next(); if (example.getValue() != null) { if (isModel) { diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/spring/SpringCodegenTest.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/spring/SpringCodegenTest.java index c8d289dc2320..2776d9219398 100644 --- a/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/spring/SpringCodegenTest.java +++ b/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/spring/SpringCodegenTest.java @@ -8690,4 +8690,38 @@ public void testReactiveSpringHttpInterfaceSupportListOfStringReturnTypeNoRespon "Mono> getUserIdSet" ); } + + @Test + public void shouldExposeRequestBodyNamedExamplesToTemplateContext_issue23607() throws IOException { + File output = Files.createTempDirectory("test").toFile().getCanonicalFile(); + output.deleteOnExit(); + + OpenAPI openAPI = new OpenAPIParser().readLocation( + "src/test/resources/3_0/spring/requestbody_named_examples.yaml", + null, + new ParseOptions() + ).getOpenAPI(); + + SpringCodegen codegen = new SpringCodegen(); + codegen.setOutputDir(output.getAbsolutePath()); + codegen.additionalProperties().put(INTERFACE_ONLY, "true"); + + ClientOptInput input = new ClientOptInput(); + input.openAPI(openAPI); + input.config(codegen); + + DefaultGenerator generator = new DefaultGenerator(); + generator.setGeneratorPropertyDefault(CodegenConstants.APIS, "true"); + generator.setGenerateMetadata(false); + generator.opts(input).generate(); + + // Verify via codegen operation inspection after initialization + Operation operation = openAPI.getPaths().get("/users").getPost(); + CodegenOperation codegenOperation = codegen.fromOperation("/users", "POST", operation, null); + + assertNotNull(codegenOperation.bodyParam); + assertNotNull(codegenOperation.bodyParam.examples); + assertTrue(codegenOperation.bodyParam.examples.containsKey("Jessica")); + assertTrue(codegenOperation.bodyParam.examples.containsKey("Ron")); + } } \ No newline at end of file diff --git a/modules/openapi-generator/src/test/resources/3_0/spring/requestbody_named_examples.yaml b/modules/openapi-generator/src/test/resources/3_0/spring/requestbody_named_examples.yaml new file mode 100644 index 000000000000..cde7811839e0 --- /dev/null +++ b/modules/openapi-generator/src/test/resources/3_0/spring/requestbody_named_examples.yaml @@ -0,0 +1,36 @@ +openapi: 3.0.0 +info: + title: Example API + version: 1.0.0 +paths: + /users: + post: + summary: Adds a new user + tags: + - User + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/User" + examples: + Jessica: + value: + id: 10 + name: Jessica Smith + Ron: + value: + id: 11 + name: Ron Stewart + responses: + "200": + description: OK +components: + schemas: + User: + type: object + properties: + id: + type: integer + name: + type: string \ No newline at end of file