Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Java] Fixes Spring generator devaultValues for int64/float/double #4969

Merged
merged 9 commits into from
Jan 14, 2020

Conversation

spacether
Copy link
Contributor

@spacether spacether commented Jan 10, 2020

This PR fixes #1226
That issue describes that when we have an in64, float, or double CodegenParameter, the string defaultValue includes unneeded suffix characters l,f, or d. Those suffixes were added by AbstractJavaCodegen because that generator assumed that those default values would be used as java values of the correct type. Instead, the spring generator uses String type default values for CodegenParameter only. Typically those values are handled with parseLong/parseFloat/parseDouble etc which fail if the value includes a character suffix.

This update keeps the suffixes on CodegenProperties because templates use those defaultValues as Long/Float/Double literal values.
CodegenProperty defaultValues:

  • "9223372036854775807l" (int64)
  • "3.14159f" (float)
  • "3.14159d" (double)

For CodegenParameter we now use values which lack the suffix so parseLong/parseDouble/parseFloat will work
CodegenParameter defaultValues:

  • "9223372036854775807" (int64)
  • "3.14159" (float)
  • "3.14159" (double)

Further work

I verified that all spring generators use classes that require String defaultValues for query params.
These are:

  1. spring-mvc-petstore-server (ApiParam,RequestParam String defaultValue)
  2. spring-cloud-feign-petstore (ApiParam, RequestParam String defaultValue)
  3. spring-cloud-feign-async-petstore (ApiParam, RequestParam String defaultValue)
  4. spring-stubs (ApiParam, RequestParam String defaultValue)
  5. spring-mvc-petstore-j8-async-server (ApiParam, RequestParam String defaultValue)
  6. spring-mvc-petstore-j8-localdatetime (ApiParam, RequestParam String defaultValue)
  7. spring-delegate (ApiParam, RequestParam String defaultValue)
  8. spring-delegate-j8 (ApiParam, RequestParam String defaultValue)
  9. springboot-petstore-server (ApiParam, RequestParam String defaultValue)
  10. springboot-petstore-server-reactive (ApiParam, RequestParam String defaultValue)
  11. springboot-petstore-server-beanvalidation (ApiParam, RequestParam String defaultValue)
  12. springboot-petstore-server-implicitHeaders (ApiParam, RequestParam String defaultValue)
  13. springboot-petstore-server-useOptional (ApiParam, RequestParam String defaultValue)
  14. springboot-virtualan-petstore-server (ApiParam, RequestParam String defaultValue)

Verification Test

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.

Java Technical Committee:
@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)

…defaults, adds testDefaultValuesFixed

Adds the test testDefaultValuesFixed
@spacether spacether changed the title Fixes spring generator devaultValues for int64/float/double [Java] Fixes spring generator devaultValues for int64/float/double Jan 10, 2020
@spacether spacether changed the title [Java] Fixes spring generator devaultValues for int64/float/double [Java] Fixes Spring generator devaultValues for int64/float/double Jan 10, 2020
@spacether spacether closed this Jan 14, 2020
@spacether spacether reopened this Jan 14, 2020
@wing328
Copy link
Member

wing328 commented Jan 14, 2020

Tested again and no longer encounter the issue.

@wing328 wing328 merged commit 8a94a3a into OpenAPITools:master Jan 14, 2020
@wing328 wing328 added this to the 4.2.3 milestone Jan 14, 2020
@fooo
Copy link

fooo commented Jul 8, 2020

Exactly the same problem occurs with the jaxrs-cxf generator. In the templates_@DefalutValue_ annotations are generated based on the model defaultvalue parameter. This results in a @DefaultValue with a postfix which results in invalid default values.

@wing328
Copy link
Member

wing328 commented Jul 8, 2020

@fooo I wonder if you can file a PR with a similar fix.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Query Parameters of type integer in format int64 seem to create a broken spring API
3 participants