Created by: martin-bucinskas
Updated SpringCodegen
to allow the usage of oneOf
when generating models with discriminators and without.
Fixes:
- https://github.com/OpenAPITools/openapi-generator/issues/5381
- https://github.com/OpenAPITools/openapi-generator/issues/9601
- https://github.com/OpenAPITools/openapi-generator/issues/9981
- https://github.com/OpenAPITools/openapi-generator/pull/10392
oneOf
interfaces without discriminator
Generation of https://swagger.io/specification#discriminator-object states that oneOf
can be used without a discriminator object.
We can utilise a feature brought in by jackson since version 2.12 to use deduction-based polymorphism.
It basically allows omitting of actual Type Id field or value, as long as the subtype can be deduced (
@JsonTypeInfo(use=DEDUCTION)
) from existence of fields. That is, every subtype has a distinct set of fields they included, and so during deserialization type can be uniquely and reliably detected.
By setting the x-deduction
and x-deduction-model-names
vendor extensions, we can set up the values that will be populated in the oneOf
templates for a deduction based approach, where x-deduction
is a flag used to switch between deduction and discriminator approach, and x-deduction-model-names
is an array of the type names.
PR based on https://github.com/OpenAPITools/openapi-generator/pull/10463 implementation.
PR checklist
-
Read the contribution guidelines. -
Pull Request title clearly describes the work in the pull request and Pull Request description provides details about how to validate the work. Missing information here may result in delayed response from the community. -
Run the following to build the project and update samples: ./mvnw clean package ./bin/generate-samples.sh ./bin/utils/export_docs_generators.sh
./bin/generate-samples.sh bin/configs/java*
. For Windows users, please run the script in Git BASH. -
File the PR against the correct branch: master
(5.3.0),6.0.x
-
If your PR is targeting a particular programming language, @mention the technical committee members, so they are more likely to review the pull request.
@bbdouglas (2017/07) @sreeshas (2017/08) @jfiala (2017/08) @lukoyanov (2017/09) @cbornet (2017/09) @jeff9finger (2018/01) @karismann (2019/03) @Zomzog (2019/04) @lwlee2608 (2019/10) @nmuesch (2021/01)