diff --git a/modules/openapi-generator/src/main/resources/JavaSpring/formParams.mustache b/modules/openapi-generator/src/main/resources/JavaSpring/formParams.mustache index fdb51cc6c69c..257b86a171d5 100644 --- a/modules/openapi-generator/src/main/resources/JavaSpring/formParams.mustache +++ b/modules/openapi-generator/src/main/resources/JavaSpring/formParams.mustache @@ -1 +1,2 @@ -{{#isFormParam}}{{^isFile}}{{>paramDoc}}{{#useBeanValidation}} @Valid{{/useBeanValidation}} {{#isModel}}@RequestPart{{/isModel}}{{^isModel}}{{#isArray}}@RequestPart{{/isArray}}{{^isArray}}{{#reactive}}@RequestPart{{/reactive}}{{^reactive}}@RequestParam{{/reactive}}{{/isArray}}{{/isModel}}(value = "{{baseName}}"{{#required}}, required = true{{/required}}{{^required}}, required = false{{/required}}){{>dateTimeParam}} {{^required}}{{#useOptional}}Optional<{{/useOptional}}{{/required}}{{{dataType}}}{{^required}}{{#useOptional}}>{{/useOptional}}{{/required}} {{paramName}}{{/isFile}}{{#isFile}}{{>paramDoc}} @RequestPart(value = "{{baseName}}"{{#required}}, required = true{{/required}}{{^required}}, required = false{{/required}}) {{#isArray}}List<{{/isArray}}{{#reactive}}Flux{{/reactive}}{{^reactive}}MultipartFile{{/reactive}}{{#isArray}}>{{/isArray}} {{paramName}}{{/isFile}}{{/isFormParam}} \ No newline at end of file +{{#isFormParam}}{{^isFile}}{{>paramDoc}}{{#useBeanValidation}} @Valid{{/useBeanValidation}} {{#isModel}}@RequestPart{{/isModel}}{{^isModel}}{{#isArray}}@RequestPart{{/isArray}}{{^isArray}}{{#reactive}}@RequestPart{{/reactive}}{{^reactive}}@RequestParam{{/reactive}}{{/isArray}}{{/isModel}}(value = "{{baseName}}"{{#required}}, required = true{{/required}}{{^required}}, required = false{{/required}}{{#defaultValue}}, defaultValue = "{{{.}}}"{{/defaultValue}}){{>dateTimeParam}} {{^required}}{{#useOptional}}Optional<{{/useOptional}}{{/required}}{{{dataType}}}{{^required}}{{#useOptional}}>{{/useOptional}}{{/required}} {{paramName}}{{/isFile}}{{#isFile}}{{>paramDoc}} @RequestPart(value = "{{baseName}}"{{#required}}, required = true{{/required}}{{^required}}, required = false{{/required}}) {{#isArray}}List<{{/isArray}}{{#reactive}}Flux{{/reactive}}{{^reactive}}MultipartFile{{/reactive}}{{#isArray}}>{{/isArray}} {{paramName}}{{/isFile}}{{/isFormParam}} + 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 328a8acdb348..5316cf96852b 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 @@ -5177,6 +5177,29 @@ public void shouldGenerateSingleDeprecatedAnnotation() { .doesNotHaveAnnotation("Deprecated"); } + @Test + public void testRequestBodyFormParamsDefaultValue() { + final var tempDir = TestUtils.newTempFolder(); + final CodegenConfigurator configurator = new CodegenConfigurator() + .setInputSpec("src/test/resources/3_0/spring/formParams_defaultValue.yaml") + .setGeneratorName("spring") + .setOutputDir(tempDir.toString()); + + new DefaultGenerator().opts(configurator.toClientOptInput()).generate(); + + JavaFileAssert.assertThat(tempDir.resolve("src/main/java/org/openapitools/api/SomeApi.java")) + .assertMethod("someDummyEndpoint", "String", "String") + .assertParameter("productId") + .assertParameterAnnotations() + .containsWithNameAndAttributes("RequestParam", + Map.of("value", "\"product_id\"", "required", "true")) + .toParameter().toMethod() + .assertParameter("locale") + .assertParameterAnnotations() + .containsWithNameAndAttributes("RequestParam", + Map.of("value", "\"locale\"", "required", "false", "defaultValue", "\"en_US\"")); + } + @Test public void shouldAnnotateNonRequiredFieldsAsNullable() throws IOException { SpringCodegen codegen = new SpringCodegen(); diff --git a/modules/openapi-generator/src/test/resources/3_0/spring/formParams_defaultValue.yaml b/modules/openapi-generator/src/test/resources/3_0/spring/formParams_defaultValue.yaml new file mode 100644 index 000000000000..51999928d769 --- /dev/null +++ b/modules/openapi-generator/src/test/resources/3_0/spring/formParams_defaultValue.yaml @@ -0,0 +1,42 @@ +openapi: 3.0.0 +info: + version: "1.0.0" + title: formParams-defaultValue-test +paths: + /some/dummy/endpoint: + post: + operationId: someDummyEndpoint + requestBody: + required: true + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/DummyRequest' + responses: + 200: + description: Successfully created + content: + application/json: + schema: + type: object + additionalProperties: + $ref: '#/components/schemas/DummyResponse' +components: + schemas: + DummyResponse: + required: + - status + type: object + properties: + status: + type: string + DummyRequest: + required: + - product_id + type: object + properties: + product_id: + type: string + locale: + type: string + default: "en_US" \ No newline at end of file