I generate a Java class from a YAML file describing the model with openapi-generator-maven-plugin
.
<plugin>
<groupId>org.openapitools</groupId>
<artifactId>openapi-generator-maven-plugin</artifactId>
<version>4.3.1</version>
<executions>
<execution>
<id>document-10-service</id>
<phase>generate-sources</phase>
<goals>
<goal>generate</goal>
</goals>
<configuration>
<inputSpec>${project.basedir}/src/openapi/server/v1.0/documents-1.0.yaml</inputSpec>
<output>${project.build.directory}/generated-sources/document-10-service</output>
<generateApis>true</generateApis>
<generateApiTests>false</generateApiTests>
<generateModelTests>false</generateModelTests>
<generateApiDocumentation>false</generateApiDocumentation>
<generateModelDocumentation>false</generateModelDocumentation>
<generateSupportingFiles>true</generateSupportingFiles>
<apiPackage>com.siemens.spice.documents.generated.api</apiPackage>
<modelPackage>com.siemens.spice.documents.generated.model</modelPackage>
<invokerPackage>com.siemens.spice.documents.generated</invokerPackage>
<generatorName>spring</generatorName>
<skipOverwrite>false</skipOverwrite>
<configOptions>
<sourceFolder>server</sourceFolder>
<supportingFiles>ApiUtil.java</supportingFiles>
<library>spring-boot</library>
<dateLibrary>java8</dateLibrary>
<interfaceOnly>true</interfaceOnly>
<useBeanValidation>true</useBeanValidation>
<hideGenerationTimestamp>true</hideGenerationTimestamp>
</configOptions>
</configuration>
</execution>
I have the following model described in the YAML file:
Document:
required:
- documentMetaData
- documentContent
type: "object"
properties:
documentMetaData:
$ref: "#/definitions/DocumentMetaData"
description: "Document type information"
documentContent:
type: string
format: byte
description: "Base64 encoded document content"
This generates the following class which is ok:
public class DownloadDocument {
@JsonProperty("documentMetaData")
private DocumentMetaData documentMetaData;
@JsonProperty("documentContent")
private byte[] documentContent;
}
But when entering the swagger-ui.html
page and trying to get the documentation by click on the link:
it looks like this:
"DownloadDocument": {
"required": [
"documentContent",
"documentMetaData"
],
"type": "object",
"properties": {
"documentMetaData": {
"$ref": "#/components/schemas/DocumentMetaData"
},
"documentContent": {
**"type": "array",
"items": {
"type": "string",
"format": "byte"
}**
}
The document content which is a byte[]
is documented as an array of byte[]
and when using this description in other app to generate an API client it generates a List<byte[]>
.
I would expect the following format also in the OpenApi Specification/Description:
documentContent:
type: string
format: byte
description: "Base64 encoded document content"
Can you please advice if this is a bug or if not how can be resolved?