Skip to content

Commit 2e92477

Browse files
committed
fix implementation and tests
1 parent 4311007 commit 2e92477

3 files changed

Lines changed: 43 additions & 9 deletions

File tree

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
{{#isFormParam}}{{^isFile}}{{>paramDoc}}{{#useBeanValidation}} {{>beanValidationBodyParams}}@Valid{{/useBeanValidation}} {{#isModel}}@RequestParam{{/isModel}}{{^isModel}}{{#isArray}}@RequestParam{{/isArray}}{{^isArray}}{{#reactive}}@RequestParam{{/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}}{{#isByteArray}} /* base64 encoded binary */{{/isByteArray}}{{#isFile}}{{>paramDoc}} @RequestPart(value = "{{baseName}}"{{#required}}, required = true{{/required}}{{^required}}, required = false{{/required}}) {{#reactive}}{{#isArray}}Flux<{{/isArray}}Part{{#isArray}}>{{/isArray}}{{/reactive}}{{^reactive}}{{#isArray}}List<{{/isArray}}MultipartFile{{#isArray}}>{{/isArray}}{{/reactive}} {{paramName}}{{/isFile}}{{/isFormParam}}
1+
{{#isFormParam}}{{^isFile}}{{>paramDoc}}{{#useBeanValidation}} {{>beanValidationBodyParams}}@Valid{{/useBeanValidation}} {{#isModel}}@RequestPart{{/isModel}}{{^isModel}}{{#isArray}}{{#items.isModel}}@RequestPart{{/items.isModel}}{{^items.isModel}}@RequestParam{{/items.isModel}}{{/isArray}}{{^isArray}}{{#reactive}}@RequestParam{{/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}}{{#isByteArray}} /* base64 encoded binary */{{/isByteArray}}{{#isFile}}{{>paramDoc}} @RequestPart(value = "{{baseName}}"{{#required}}, required = true{{/required}}{{^required}}, required = false{{/required}}) {{#reactive}}{{#isArray}}Flux<{{/isArray}}Part{{#isArray}}>{{/isArray}}{{/reactive}}{{^reactive}}{{#isArray}}List<{{/isArray}}MultipartFile{{#isArray}}>{{/isArray}}{{/reactive}} {{paramName}}{{/isFile}}{{/isFormParam}}

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

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -714,7 +714,7 @@ public void testMultipartBoot() throws IOException {
714714

715715
// Check that api validates mixed multipart request
716716
JavaFileAssert.assertThat(files.get("MultipartMixedApi.java"))
717-
.assertMethod("multipartMixed", "MultipartMixedStatus", "MultipartFile", "MultipartMixedRequestMarker", "List<MultipartMixedStatus>")
717+
.assertMethod("multipartMixed", "MultipartMixedStatus", "MultipartFile", "MultipartMixedRequestMarker", "List<MultipartMixedRequestMarker>", "List<MultipartMixedStatus>")
718718
.assertParameter("status").hasType("MultipartMixedStatus")
719719
.assertParameterAnnotations()
720720
.containsWithName("Valid")
@@ -728,10 +728,15 @@ public void testMultipartBoot() throws IOException {
728728
.assertParameter("marker").hasType("MultipartMixedRequestMarker")
729729
.assertParameterAnnotations()
730730
.containsWithNameAndAttributes("RequestPart", ImmutableMap.of("value", "\"marker\"", "required", "false"))
731+
// markerArray (array of objects — IMPORTANT)
732+
.toParameter().toMethod()
733+
.assertParameter("markerArray").hasType("List<MultipartMixedRequestMarker>")
734+
.assertParameterAnnotations()
735+
.containsWithNameAndAttributes("RequestPart", ImmutableMap.of("value", "\"markerArray\"", "required", "false"))
731736
.toParameter().toMethod()
732737
.assertParameter("statusArray").hasType("List<MultipartMixedStatus>")
733738
.assertParameterAnnotations()
734-
.containsWithNameAndAttributes("RequestPart", ImmutableMap.of("value", "\"statusArray\"", "required", "false"));
739+
.containsWithNameAndAttributes("RequestParam", ImmutableMap.of("value", "\"statusArray\"", "required", "false"));
735740
}
736741

737742
@Test
@@ -774,12 +779,12 @@ public void testReactiveMultipartBoot() throws IOException {
774779

775780
// Check that api validates mixed multipart request
776781
JavaFileAssert.assertThat(files.get("MultipartMixedApi.java"))
777-
.assertMethod("multipartMixed", "MultipartMixedStatus", "Part", "MultipartMixedRequestMarker", "List<MultipartMixedStatus>", "ServerWebExchange")
782+
.assertMethod("multipartMixed", "MultipartMixedStatus", "Part", "MultipartMixedRequestMarker", "List<MultipartMixedRequestMarker>", "List<MultipartMixedStatus>", "ServerWebExchange")
778783
.assertParameter("status").hasType("MultipartMixedStatus")
779784
.assertParameterAnnotations()
780785
.containsWithName("Valid")
781786
.containsWithNameAndAttributes("ApiParam", ImmutableMap.of("value", "\"\""))
782-
.containsWithNameAndAttributes("RequestPart", ImmutableMap.of("value", "\"status\"", "required", "true"))
787+
.containsWithNameAndAttributes("RequestParam", ImmutableMap.of("value", "\"status\"", "required", "true"))
783788
.toParameter().toMethod()
784789
.assertParameter("file").hasType("Part")
785790
.assertParameterAnnotations()
@@ -789,9 +794,14 @@ public void testReactiveMultipartBoot() throws IOException {
789794
.assertParameterAnnotations()
790795
.containsWithNameAndAttributes("RequestPart", ImmutableMap.of("value", "\"marker\"", "required", "false"))
791796
.toParameter().toMethod()
797+
// markerArray (array of objects — IMPORTANT)
798+
.assertParameter("markerArray").hasType("List<MultipartMixedRequestMarker>")
799+
.assertParameterAnnotations()
800+
.containsWithNameAndAttributes("RequestPart", ImmutableMap.of("value", "\"markerArray\"", "required", "false"))
801+
.toParameter().toMethod()
792802
.assertParameter("statusArray").hasType("List<MultipartMixedStatus>")
793803
.assertParameterAnnotations()
794-
.containsWithNameAndAttributes("RequestPart", ImmutableMap.of("value", "\"statusArray\"", "required", "false"));
804+
.containsWithNameAndAttributes("RequestParam", ImmutableMap.of("value", "\"statusArray\"", "required", "false"));
795805
}
796806

797807
@Test
@@ -4890,7 +4900,7 @@ public void testSSEOperationSupport() throws Exception {
48904900
}
48914901

48924902
@Test
4893-
public void givenMultipartForm_whenGenerateReactiveServer_thenParameterAreCreatedAsRequestPart() throws IOException {
4903+
public void givenMultipartForm_whenGenerateReactiveServer_thenParameterAreCreatedAsRequestParam() throws IOException {
48944904
File output = Files.createTempDirectory("test").toFile().getCanonicalFile();
48954905
output.deleteOnExit();
48964906
String outputPath = output.getAbsolutePath().replace('\\', '/');
@@ -4913,9 +4923,9 @@ public void givenMultipartForm_whenGenerateReactiveServer_thenParameterAreCreate
49134923
generator.setGeneratorPropertyDefault(CodegenConstants.APIS, "true");
49144924

49154925
generator.opts(input).generate();
4916-
4926+
// Only file or object types would use @RequestPart
49174927
assertFileContains(Paths.get(outputPath + "/src/main/java/org/openapitools/api/PetApi.java"),
4918-
"@Valid @RequestPart(value = \"additionalMetadata\", required = false) String additionalMetadata");
4928+
"@Valid @RequestParam(value = \"additionalMetadata\", required = false) String additionalMetadata");
49194929
}
49204930

49214931
@Test

modules/openapi-generator/src/test/resources/3_0/form-multipart-binary-array.yaml

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,11 @@ paths:
6666
properties:
6767
name:
6868
type: string
69+
markerArray:
70+
description: "array of objects"
71+
type: array
72+
items:
73+
$ref: '#/components/schemas/MultipartMixedRequestMarker'
6974
file:
7075
description: "a file"
7176
type: string
@@ -87,3 +92,22 @@ components:
8792
- IN_PROGRESS
8893
- REJECTED
8994
example: REJECTED
95+
MultipartMixedRequestMarker:
96+
type: object
97+
description: Marker metadata sent as JSON part in multipart request
98+
required:
99+
- name
100+
properties:
101+
name:
102+
type: string
103+
description: Marker name
104+
example: example-marker
105+
priority:
106+
type: integer
107+
format: int32
108+
description: Optional priority
109+
example: 10
110+
active:
111+
type: boolean
112+
description: Whether the marker is active
113+
example: true

0 commit comments

Comments
 (0)