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

Fix the Java generator to generate valid @RequestMappings where the produce field takes list of string parameters instead of a single comma-separated string #18092

Merged

Conversation

larsenf-els
Copy link
Contributor

@larsenf-els larsenf-els commented Mar 13, 2024

Fix AbstractJavaCodegen.getAccepts() so it returns a String[] instead of a comma-separated string, and fixed api.mustache so the @RequestMapping annotation generates the produce field for x-accepts to take a list of string parameters (valid) instead of a single comma-separated string (invalid).

Before this change, the spring generator generated this invalid @RequestMapping:

    @RequestMapping(
        method = RequestMethod.PUT,
        value = "/customers",
        produces = "application/json,application/problem+json", // invalid!
        consumes = "application/json"
    )

The issue here is that the @RequestMapping annotation does not accept a comma-separated list with the produces parameter.
It needs to be generated as a list of strings like this:

    @RequestMapping(
        method = RequestMethod.PUT,
        value = "/customers",
        produces = { "application/json", "application/problem+json" }, // valid
        consumes = "application/json"
    )

@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) @martin-mfg (2023/08)

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/configs/*.yaml
    ./bin/utils/export_docs_generators.sh
    
    (For Windows users, please run the script in Git BASH)
    Commit all changed files.
    This is important, as CI jobs will verify all generator outputs of your HEAD commit as it would merge with master.
    These must match the expectations made by your contribution.
    You may regenerate an individual generator by passing the relevant config(s) as an argument to the script, for example ./bin/generate-samples.sh bin/configs/java*.
    IMPORTANT: Do NOT purge/delete any folders/files (e.g. tests) when regenerating the samples as manually written tests may be removed.
  • File the PR against the correct branch: master (upcoming 7.1.0 minor release - breaking changes with fallbacks), 8.0.x (breaking changes without fallbacks)
  • If your PR is targeting a particular programming language, @mention the technical committee members, so they are more likely to review the pull request.

to fix #18058

… a String array instead of a comma-separated string, and fixed api.mustache so the @RequestMapping annotation generated produces for x-accepts as a parameter list instead of a (single) string.
import org.openapitools.codegen.*;
import org.openapitools.codegen.languages.AbstractJavaCodegen;
import org.openapitools.codegen.utils.ModelUtils;
import org.testng.Assert;
import org.testng.annotations.Test;

import javax.validation.constraints.AssertTrue;
Copy link
Contributor

@MelleD MelleD Mar 13, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why do you need this import? I guess you have organize the imports again

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why do you need this import? I guess you have organize the imports again

Yes, I saw that IntelliJ had reorganized the imports and that the import you mentioned could be removed as well. :)

@larsenf-els larsenf-els changed the title #18058 Fix the Spring generator to generate valid @RequestMappings where the produce field takes list of string parameters instead of a single comma-separated string #18058 Fix the Java generator to generate valid @RequestMappings where the produce field takes list of string parameters instead of a single comma-separated string Mar 13, 2024
@larsenf-els larsenf-els marked this pull request as ready for review March 13, 2024 14:59
sb.append(produce);
}
return sb.toString();
return new LinkedHashSet<>(producesInfo).toArray(new String[] {});
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why not directly producesInfo.toArray?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I did it to guarantee the sort order as I saw the output for the produces field was output in another order when generating all the scripts. But it seems like this is not the case (anymore). So I have updated the code to follow your suggestion. :)

@MelleD
Copy link
Contributor

MelleD commented Mar 15, 2024

Looks good, thanks :)

@wing328
Copy link
Member

wing328 commented Mar 21, 2024

can you please resolve the merge conflicts when you've time? then i will merge

thanks for the PR

@larsenf-els
Copy link
Contributor Author

can you please resolve the merge conflicts when you've time? then i will merge

thanks for the PR

You are welcome. I am glad that I can give contribute back to the community when I am a big fan of the OpenAPI generator. 😄

I have fixed the merge conflict, and also made a minor bugfix that caused some checks to fail. We should be good to go now.

@wing328
Copy link
Member

wing328 commented Mar 21, 2024

Thanks for contributing back 👍

@wing328 wing328 merged commit a4508f6 into OpenAPITools:master Mar 21, 2024
165 checks passed
@wing328 wing328 added this to the 7.5.0 milestone Mar 21, 2024
@wing328 wing328 changed the title #18058 Fix the Java generator to generate valid @RequestMappings where the produce field takes list of string parameters instead of a single comma-separated string Fix the Java generator to generate valid @RequestMappings where the produce field takes list of string parameters instead of a single comma-separated string Mar 21, 2024
@larsenf-els larsenf-els deleted the fix-getAccepts-in-AbstractJavaCodegen branch May 16, 2024 07:19
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.

[BUG] Bug introduced with version 7.3.0 in AbstractJavaCodegen.java
3 participants