OpenAPITools / openapi-generator

OpenAPI Generator allows generation of API client libraries (SDK generation), server stubs, documentation and configuration automatically given an OpenAPI Spec (v2, v3)
https://openapi-generator.tech
Apache License 2.0
21.58k stars 6.52k forks source link

[BUG] type: array is not taken into account when content is multipart/form-data #4963

Open wiktormk opened 4 years ago

wiktormk commented 4 years ago
Description

type: array is not taken into account when content is multipart/form-data

generated java code:

@ApiOperation(value = "upload files", nickname = "uploadFiles", notes = "", response = UploadActionStatus.class, tags={  })
@ApiResponses(value = { 
    @ApiResponse(code = 200, message = "files upload status", response = UploadActionStatus.class),
    @ApiResponse(code = 200, message = "unexpected error", response = Error.class) })
@RequestMapping(value = "/utility/upload",
    produces = { "application/json" }, 
    consumes = { "multipart/form-data" },
    method = RequestMethod.POST)
default ResponseEntity<UploadActionStatus> _uploadFiles(@ApiParam(value = "file detail") @Valid @RequestPart("file") MultipartFile filenames) {
    return uploadFiles(filenames);
}

Expected:

@ApiOperation(value = "upload files", nickname = "uploadFiles", notes = "", response = UploadActionStatus.class, tags={  })
@ApiResponses(value = { 
    @ApiResponse(code = 200, message = "files upload status", response = UploadActionStatus.class),
    @ApiResponse(code = 200, message = "unexpected error", response = Error.class) })
@RequestMapping(value = "/utility/upload",
    produces = { "application/json" }, 
    consumes = { "multipart/form-data" },
    method = RequestMethod.POST)
default ResponseEntity<UploadActionStatus> _uploadFiles(@ApiParam(value = "file detail") @Valid @RequestPart("file") MultipartFile[] filenames) {
    return uploadFiles(filenames);
}
openapi-generator version

openapi-generator-maven-plugin 4.2.2

OpenAPI declaration file content or url
  requestBody:
    content:
      multipart/form-data:
        schema:
          type: object
          properties:
            filenames:
              type: array
              items:
                type: string
                format: binary
Command line used for generation
        <plugin>
            <groupId>org.openapitools</groupId>
            <artifactId>openapi-generator-maven-plugin</artifactId>
            <executions>
                <execution>
                    <phase>generate-sources</phase>
                    <goals>
                        <goal>generate</goal>
                    </goals>
                    <configuration>
                        <inputSpec>${project.build.directory}/integration/my.yml</inputSpec>
                        <generatorName>spring</generatorName>
                        <apiPackage>my..controller</apiPackage>
                        <modelPackage>my..model</modelPackage>
                        <generateSupportingFiles>true</generateSupportingFiles>
                        <configOptions>
                            <enableBuilderSupport>true</enableBuilderSupport>
                            <interfaceOnly>true</interfaceOnly>
                            <dateLibrary>java8</dateLibrary>
                            <java8>true</java8>
                            <serializableModel>true</serializableModel>
                            <delegatePattern>true</delegatePattern>
                            <useBeanValidation>true</useBeanValidation>
                            <hideGenerationTimestamp>true</hideGenerationTimestamp>
                            <simpleFluentPattern>true</simpleFluentPattern>
                            <collectionFluentPattern>true</collectionFluentPattern>
                        </configOptions>
                    </configuration>
                </execution>
            </executions>
        </plugin>
Steps to reproduce

create java maven project and generate code

Related issues/PRs
Suggest a fix/enhancement

Expected:

filenames shall be an array:

@ApiOperation(value = "upload files", nickname = "uploadFiles", notes = "", response = UploadActionStatus.class, tags={  })
@ApiResponses(value = { 
    @ApiResponse(code = 200, message = "files upload status", response = UploadActionStatus.class),
    @ApiResponse(code = 200, message = "unexpected error", response = Error.class) })
@RequestMapping(value = "/utility/upload",
    produces = { "application/json" }, 
    consumes = { "multipart/form-data" },
    method = RequestMethod.POST)
default ResponseEntity<UploadActionStatus> _uploadFiles(@ApiParam(value = "file detail") @Valid @RequestPart("file") MultipartFile[] filenames) {
    return uploadFiles(filenames);
}
EinfachTuen commented 2 years ago

Hi i noticed the same issue in openapi-generator-maven-plugin 6.0.1 is there some workaround? Can I somehow ignore only the route for upload of files inside the generator? So that he use the rest for generation but for this i can create a custom api class?