Created by: bkabrda
PR checklist
-
Read the contribution guidelines. -
Ran the shell script under ./bin/
to update Petstore sample so that CIs can verify the change. (For instance, only need to run./bin/{LANG}-petstore.sh
,./bin/openapi3/{LANG}-petstore.sh
if updating the {LANG} (e.g. php, ruby, python, etc) code generator or {LANG} client's mustache templates). Windows batch files can be found in.\bin\windows\
. If contributing template-only or documentation-only changes which will change sample output, be sure to build the project first. -
Filed the PR against the correct branch: master
,4.1.x
,5.0.x
. Default:master
. -
Copied the technical committee to review the pull request if your PR is targeting a particular programming language.
CC @bbdouglas (2017/07) @sreeshas (2017/08) @jfiala (2017/08) @lukoyanov (2017/09) @cbornet (2017/09) @jeff9finger (2018/01) @karismann (2019/03) @Zomzog (2019/04)
Description of the PR
The problem that this PR solves is that for JsonNullable
fields of POJOs, the field would appear twice, once in snake case and once in camel case (e.g. both some_field
and someField
would appear in the JSON). The cause is:
-
JsonNullable
fields have two sets of getters and setters - "simple ones" (e.g.getSomeField
) andJsonNullable
ones (e.g.getSomeField_JsonNullable
). - For the
JsonNullable
fields, thegetSomeField_JsonNullable
getter is marked as the attribute and explicitly marked to be serialized assome_field
. - By default, the Jackson serialization library takes all getters of the object and serializes them. This means that Jackson would also see the non-
JsonNullable
getter and add it to the serialized object. - This would only demonstrate on fields that have at least two words in their name. For example,
getEnd
would work fine, as there would begetEnd
andgetEnd_JsonNullable
. ThegetEnd_JsonNullable
getter would be marked to be serialized asend
, which would make Jackson overridegetEnd
. But forgetSomeField
andgetSomeField_JsonNullable
, Jackson would serializegetSomeField
assomeField
andgetSomeField_JsonNullable
assome_field
. - Note that this fix also uncovered the need to add a private setter if the nullable field is read-only (Jackson can use that to properly set the value of the readOnly nullable attribute).
This patch fixes the above by explicitly marking the simple getters as ignored during serialization.
There's a slight problem now that this adds an extraneous newline in between the getters' annotations, so I'm trying to get rid of that.