[BUG] [spring][server] oneOf Polymorphism support for spring boot
Created by: dkirrane
Description
Currently, openapi-generator doesn't support oneOf
. It currently generates the following broken code, outputting UNKNOWN_BASE_TYPE
rather than Pet
for the example below.
The code is broken with or without the discriminator
in the Spec.
default ResponseEntity<Void> _petsPost(@ApiParam(value = "" ) @Valid @RequestBody(required = false) UNKNOWN_BASE_TYPE UNKNOWN_BASE_TYPE) {
return petsPost(UNKNOWN_BASE_TYPE);
}
openapi-generator version
pom.xml
<plugin>
<groupId>org.openapitools</groupId>
<artifactId>openapi-generator-maven-plugin</artifactId>
<version>4.2.3</version>
<executions>
<execution>
<id>generate</id>
<goals>
<goal>generate</goal>
</goals>
<configuration>
<inputSpec>${project.basedir}/src/main/resources/api.yaml</inputSpec>
<generatorName>spring</generatorName>
<generateSupportingFiles>true</generateSupportingFiles>
<configOptions>
<sourceFolder>src/gen/java/main</sourceFolder>
<library>spring-boot</library>
<java8>true</java8>
<interfaceOnly>true</interfaceOnly>
<skipDefaultInterface>false</skipDefaultInterface>
<delegatePattern>true</delegatePattern>
</configOptions>
</configuration>
</execution>
</executions>
</plugin>
OpenAPI Spec
api.yaml
openapi: "3.0.2"
info:
version: 1.0.0
title: Polymorphism
paths:
/pets:
post:
requestBody:
content:
application/json:
schema:
oneOf:
- $ref: '#/components/schemas/Cat'
- $ref: '#/components/schemas/Dog'
discriminator:
propertyName: pet_type
responses:
'200':
description: created
components:
schemas:
# Parent
Pet:
type: object
required:
- pet_type
properties:
pet_type:
type: string
eats:
type: string
discriminator:
propertyName: pet_type
# Child 1
Dog:
allOf:
- $ref: '#/components/schemas/Pet'
- type: object
# all other properties specific to a `Dog`
properties:
bark:
type: boolean
# Child 2
Cat:
allOf:
- $ref: '#/components/schemas/Pet'
- type: object
# all other properties specific to a `Cat`
properties:
climbs:
type: boolean
Command line used for generation
Steps to reproduce
- create a
pom.xml
with openapi-generator-maven-plugin 4.2.3 - create
api.yaml
file above mvn clean compile
- see broken code under target directory
\target\generated-sources\openapi\src\gen\java\main\org\openapitools\api\PetsApi.java
Related issues/PRs
This bug is related to the Server side Java code (SpringBoot) @bkabrda has already merged PR for client Jackson Client side: https://github.com/OpenAPITools/openapi-generator/pull/5120
Suggest a fix
Try apply client side fix from https://github.com/OpenAPITools/openapi-generator/pull/5120 to server side.