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.shif 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:
-
JsonNullablefields have two sets of getters and setters - "simple ones" (e.g.getSomeField) andJsonNullableones (e.g.getSomeField_JsonNullable). - For the
JsonNullablefields, thegetSomeField_JsonNullablegetter 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-
JsonNullablegetter and add it to the serialized object. - This would only demonstrate on fields that have at least two words in their name. For example,
getEndwould work fine, as there would begetEndandgetEnd_JsonNullable. ThegetEnd_JsonNullablegetter would be marked to be serialized asend, which would make Jackson overridegetEnd. But forgetSomeFieldandgetSomeField_JsonNullable, Jackson would serializegetSomeFieldassomeFieldandgetSomeField_JsonNullableassome_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.