Created by: bkabrda
This PR represents implementation of oneOf
support for Java clients that use Jackson as serialization library. I based this on discussion in #15.
This implements oneOf
in the following way:
- The object/property that holds
oneOf
mapping is generated as aninterface
with proper jacksonJsonSubTypes
decorator derived fromdiscriminator
- this makes it possible for jackson to detect the implementing class that should be used when deserializing. - The objects referenced in
oneOf
implement this interface. - A getter for the discriminator attribute is generated in the above mentioned interface, making it easy to write code such as (assuming the API response contains
x
, which is theoneOf
interface):if (x.getType() == "type1") { Type1 type1 = (Type1) x };
- If there are any additional properties defined on the
oneOf
-containing object, they are added to all of theoneOf
members.
Limitations:
- Doesn't work with inline-defined (non-ref) members of
oneOf
. - Doesn't work if discriminator is not used (more specifically, it won't be able to deserialize API responses, as the
JsonSubTypes
decorator on the interface will be empty). - Currently it is assumed that the discriminator property has
string
type (this could probably be fixed).
I'll appreciate any feedback on this and will be happy to implement more improvements if someone has suggestions.
PR checklist
-
Read the contribution guidelines. -
If contributing template-only or documentation-only changes which will change sample output, build the project before. -
Run the shell script(s) under ./bin/
(or Windows batch scripts under.\bin\windows
) to update Petstore samples related to your fix. This is important, as CI jobs will verify all generator outputs of your HEAD commit, and these must match the expectations made by your contribution. You only need to run./bin/{LANG}-petstore.sh
,./bin/openapi3/{LANG}-petstore.sh
if updating the code or mustache templates for a language ({LANG}
) (e.g. php, ruby, python, etc). -
File the PR against the correct branch: master
,4.3.x
,5.0.x
. Default:master
. -
Copy the technical committee to review the pull request if your PR is targeting a particular programming language.
@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)