Skip to content

Commit 692389f

Browse files
fix spring multipart optional parameters
1 parent c96d308 commit 692389f

3 files changed

Lines changed: 108 additions & 1 deletion

File tree

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
{{#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}} {{{dataType}}} {{paramName}}{{/isFile}}{{#isFile}}{{>paramDoc}} @RequestPart(value = "{{baseName}}"{{#required}}, required = true{{/required}}{{^required}}, required = false{{/required}}) {{#isArray}}List<{{/isArray}}{{#reactive}}Flux<Part>{{/reactive}}{{^reactive}}MultipartFile{{/reactive}}{{#isArray}}>{{/isArray}} {{paramName}}{{/isFile}}{{/isFormParam}}
1+
{{#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}} {{>optionalDataType}} {{paramName}}{{/isFile}}{{#isFile}}{{>paramDoc}} @RequestPart(value = "{{baseName}}"{{#required}}, required = true{{/required}}{{^required}}, required = false{{/required}}) {{#isArray}}List<{{/isArray}}{{#reactive}}Flux<Part>{{/reactive}}{{^reactive}}MultipartFile{{/reactive}}{{#isArray}}>{{/isArray}} {{paramName}}{{/isFile}}{{/isFormParam}}

modules/openapi-generator/src/test/java/org/openapitools/codegen/java/spring/SpringCodegenTest.java

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5370,4 +5370,36 @@ public void shouldAcceptNullValues() throws IOException {
53705370
"this.name = Optional.of(name);"
53715371
);
53725372
}
5373+
5374+
@Test
5375+
public void givenMultipartForm_whenGenerateUsingOptional_thenParameterAreCreatedAsOptional() throws IOException {
5376+
File output = Files.createTempDirectory("test").toFile().getCanonicalFile();
5377+
output.deleteOnExit();
5378+
String outputPath = output.getAbsolutePath().replace('\\', '/');
5379+
5380+
final OpenAPI openAPI = TestUtils.parseFlattenSpec("src/test/resources/3_0/spring/issue_9530.yaml");
5381+
final SpringCodegen codegen = new SpringCodegen();
5382+
codegen.additionalProperties().put(INTERFACE_ONLY, "true");
5383+
codegen.additionalProperties().put(SpringCodegen.USE_OPTIONAL, "true");
5384+
codegen.setOpenAPI(openAPI);
5385+
codegen.setOutputDir(output.getAbsolutePath());
5386+
5387+
ClientOptInput input = new ClientOptInput();
5388+
input.openAPI(openAPI);
5389+
input.config(codegen);
5390+
5391+
5392+
DefaultGenerator generator = new DefaultGenerator();
5393+
generator.setGenerateMetadata(false);
5394+
generator.setGeneratorPropertyDefault(CodegenConstants.MODEL_TESTS, "false");
5395+
generator.setGeneratorPropertyDefault(CodegenConstants.MODEL_DOCS, "false");
5396+
generator.setGeneratorPropertyDefault(CodegenConstants.APIS, "true");
5397+
5398+
generator.opts(input).generate();
5399+
5400+
assertFileContains(Paths.get(outputPath + "/src/main/java/org/openapitools/api/PetApi.java"),
5401+
"@Valid @RequestParam(value = \"additionalMetadata\", required = false) Optional<String> additionalMetadata",
5402+
"@Valid @RequestParam(value = \"length\", required = true) Integer length");
5403+
}
5404+
53735405
}
Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
openapi: 3.0.1
2+
info:
3+
version: "1.0.0"
4+
title: use-optional-multipart-spring-boot-request-body-issue
5+
paths:
6+
/pet/{petId}/uploadImage:
7+
post:
8+
tags:
9+
- pet tag
10+
summary: uploads an image
11+
operationId: uploadFile
12+
parameters:
13+
- name: petId
14+
in: path
15+
description: ID of pet to update
16+
required: true
17+
schema:
18+
type: integer
19+
format: int64
20+
requestBody:
21+
content:
22+
multipart/form-data:
23+
schema:
24+
required:
25+
- length
26+
properties:
27+
additionalMetadata:
28+
type: string
29+
description: Additional data to pass to server
30+
length:
31+
type: integer
32+
description: Content length
33+
file:
34+
type: string
35+
description: file to upload
36+
format: binary
37+
responses:
38+
200:
39+
description: successful operation
40+
content:
41+
application/json:
42+
schema:
43+
$ref: '#/components/schemas/ApiResponse'
44+
security:
45+
- petstore_auth:
46+
- write:pets
47+
- read:pets
48+
components:
49+
schemas:
50+
ApiResponse:
51+
title: An uploaded response
52+
type: object
53+
properties:
54+
code:
55+
type: integer
56+
format: int32
57+
type:
58+
type: string
59+
message:
60+
type: string
61+
description: Describes the result of uploading an image resource
62+
securitySchemes:
63+
petstore_auth:
64+
type: oauth2
65+
flows:
66+
implicit:
67+
authorizationUrl: http://petstore.swagger.io/api/oauth/dialog
68+
scopes:
69+
write:pets: modify pets in your account
70+
read:pets: read your pets
71+
api_key:
72+
type: apiKey
73+
name: api_key
74+
in: header
75+

0 commit comments

Comments
 (0)