openapi-generator: [JAVA] discriminator.mapping is not supported (in generated model)
Description
spec: https://swagger.io/docs/specification/data-models/inheritance-and-polymorphism/ mapping can be specified in discriminator:
discriminator:
propertyName: petType
mapping:
dogggg: '#/components/schemas/Dog'
catttt: '#/components/schemas/Cat'
Currently it’s not taken in account when generating model (it’s not for Java, may be for every other language too)
openapi-generator version
3.1.0-SNAPSHOT
OpenAPI declaration file content or url
openapi: "3.0.0"
info:
version: 1.0.0
title: Swagger Petstore
license:
name: MIT
servers:
- url: http://petstore.swagger.io/v1
paths:
/pets:
get:
summary: List all pets
operationId: listPets
tags:
- pets
parameters:
- name: limit
in: query
description: How many items to return at one time (max 100)
required: false
schema:
type: integer
format: int32
responses:
'200':
description: A paged array of pets
headers:
x-next:
description: A link to the next page of responses
schema:
type: string
content:
application/json:
schema:
$ref: "#/components/schemas/Pets"
default:
description: unexpected error
content:
application/json:
schema:
$ref: "#/components/schemas/Error"
post:
summary: Create a pet
operationId: createPets
tags:
- pets
responses:
'201':
description: Null response
default:
description: unexpected error
content:
application/json:
schema:
$ref: "#/components/schemas/Error"
/pets/{petId}:
get:
summary: Info for a specific pet
operationId: showPetById
tags:
- pets
parameters:
- name: petId
in: path
required: true
description: The id of the pet to retrieve
schema:
type: string
responses:
'200':
description: Expected response to a valid request
content:
application/json:
schema:
$ref: "#/components/schemas/Pets"
default:
description: unexpected error
content:
application/json:
schema:
$ref: "#/components/schemas/Error"
components:
schemas:
Pet:
type: object
discriminator:
propertyName: petType
mapping:
dogggg: '#/components/schemas/Dog'
catttt: '#/components/schemas/Cat'
properties:
name:
type: string
petType:
type: string
required:
- name
- petType
Cat:
description: A representation of a cat
allOf:
- $ref: '#/components/schemas/Pet'
- type: object
properties:
huntingSkill:
type: string
description: The measured skill for hunting
enum:
- clueless
- lazy
- adventurous
- aggressive
required:
- huntingSkill
Dog:
description: A representation of a dog
allOf:
- $ref: '#/components/schemas/Pet'
- type: object
properties:
packSize:
type: integer
format: int32
description: the size of the pack the dog is from
default: 0
minimum: 0
required:
- packSize
Pets:
type: array
items:
$ref: "#/components/schemas/Pet"
Error:
required:
- code
- message
properties:
code:
type: integer
format: int32
message:
type: string
Command line used for generation
java -jar … generate -i api.yaml -g java --library resttemplate
Steps to reproduce
Generate model Here is what’s generated in Pet.java:
@JsonSubTypes({
@JsonSubTypes.Type(value = Cat.class, name = "Cat"),
@JsonSubTypes.Type(value = Dog.class, name = "Dog"),
})
Related issues/PRs
Related to https://github.com/OpenAPITools/openapi-generator/issues/197
Suggest a fix/enhancement
Should generate model like this:
@JsonSubTypes({
@JsonSubTypes.Type(value = Cat.class, name = "catttt"),
@JsonSubTypes.Type(value = Dog.class, name = "dogggg"),
})
About this issue
- Original URL
- State: open
- Created 6 years ago
- Reactions: 7
- Comments: 25 (19 by maintainers)
This is also biting me with the following spec and 4.2.2:
this gives
and the discriminator is set to the class’s name instead of the specified mapping. There also isn’t any
JsonTypeInfoannotations on the classes.Note that if you upgrade to an OpenAPI specification instead of swagger 2.0 and use f.e. the
<library>jersey2</library>then it does work. Also check out this stackoverflow post: https://stackoverflow.com/questions/59252417/generate-a-property-as-schema-definition-in-openapi-3-0@jmini submitted https://github.com/OpenAPITools/openapi-generator/pull/536
some concerns about the PR:
modelInheritanceSupportInGsoncause it doesn’t do anything besides calculating children (for annotation) - not 100% sure about this. Pls, review