Allow Spring generated code to use new OAS 3 annotations - #9775

Merged
wing328 merged 33 commits into
OpenAPITools:masterfrom
welshm:allow_oas3_annotations
Nov 2, 2021
Merged

Allow Spring generated code to use new OAS 3 annotations#9775
wing328 merged 33 commits into
OpenAPITools:masterfrom
welshm:allow_oas3_annotations

Conversation

@welshm

@welshmwelshm commented Jun 15, 2021

Copy link
Copy Markdown
Contributor
  • Add in oas3 option for Spring codegen to use newer annotations

  • Add useSpringController option for Spring codegen

  • Use useSpringfox to fix some unwanted imports for Spring codegen

  • Use jdk8 to add OffsetDateTime import for models in Spring codegen

  • Add JsonValue to enumOuterClass.mustache to allow enums to be
    generated properly

  • To test, use oas3: trueuseSpringController: true and useSpringfox: false in a config file to generate a Spring target.

To close#9774

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/utils/export_docs_generators.sh
    
  • File the PR against the correct branch: master, 5.1.x, 6.0.x
  • If your PR is targeting a particular programming language, @mention the technical committee members, so they are more likely to review the pull request.

welshmand others added 3 commits June 15, 2021 14:23
- Add in `oas3` option for Spring codegen to use newer annotations
- Add `useSpringController` option for Spring codegen
- Use `useSpringfox` to fix some unwanted imports for Spring codegen
- Use `jdk8` to add OffsetDateTime import for models in Spring codegen
- Add `JsonValue` to `enumOuterClass.mustache` to allow enums to be
generated properly
Bring `welshm` fork up to master
@welshm

Copy link
Copy Markdown
ContributorAuthor

I think @diyfr and @nmuesch might be good reviewers for this?

if (!this.apiFirst && !this.reactive) {
additionalProperties.put("useSpringfox", true);
if (this.useSpringfox) {
if (!this.apiFirst && !this.reactive) {

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

minor, can simplify to: this.useSpringFox && !this.apiFirst && !this.reactive

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

I'll add comments - I assume that springFox cannot be used when apiFirst and reactive is enabled but we don't use those options so I wanted it to be clear that this check is separate from the useSpringFox option check

@welshm

Copy link
Copy Markdown
ContributorAuthor

@daonomic or @lwlee2608 Would you be an appropriate reviewer for this?

@welshm

Copy link
Copy Markdown
ContributorAuthor

@wing328 - wondering if you can help me find an appropriate reviewer or how I might go about getting this added?

@welshm

Copy link
Copy Markdown
ContributorAuthor

@4brunu Would you be able to help me get a review started on this? I have not had responses from anyone else so far

@4brunu

Copy link
Copy Markdown
Contributor

You need to copy the java technical committee members for review.

@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) @nmuesch (2021/01)

@welshm

Copy link
Copy Markdown
ContributorAuthor

I'm happy to join or participate in a technical committee if that might help...

@welshm

Copy link
Copy Markdown
ContributorAuthor

@4brunu do you happen to know what the expected response time is for opening a PR and receiving a review or for applying for the technical commmittee?

Part of wanting to contribute back is so that my organization doesn't diverge too much from the project here, but it's now been over a month with no response to opening the PR other than from yourself...

@wing328

Copy link
Copy Markdown
Member

Let me try to take a look tomorrow or later this week.

@welshm

Copy link
Copy Markdown
ContributorAuthor

Let me try to take a look tomorrow or later this week.

Just following up here - I will be unavailalbe Aug 3 - 6 if there is feedback on this PR.

I am very much interested in joining the technical committee for Spring and Java if you're taking applicants (I did send an email) in order to help keep the generator supported for those languages.

@welshm

Copy link
Copy Markdown
ContributorAuthor

@wing328 any chance to get this reviewed?

@welshm

Copy link
Copy Markdown
ContributorAuthor

@wing328 Updated with latest master and regenerated tests/samples

@MichaelKunze

Copy link
Copy Markdown

Would be cool if this PR gets considered! Need this too.

@welshm

Copy link
Copy Markdown
ContributorAuthor

@wing328@4brunu is there anything more I can do to get this reviewed or looked at by someone on the team that can approve this?

This PR has been open for 2+ months, and I've kept it current with the main branch several times, but if no one will review it then there is no value in me maintaining this branch/PR.

I am more than happy to get more involved in the project, but my emails asking to join the team have also gone unanswered.

@InfoSec812

Copy link
Copy Markdown
Contributor

Functionally, I think this is quite good. I would like to see future improvements to readability as time permits. I think it would be nice to break out the OAS3/Swagger annotations into separate sub-templates which get included conditionally so that there isn't quite so much noise.

I'd be more than happy to tackle that - do you have an example or time for a quick discussion on what you imagine the file structure would look like (e.g. a separate file for Swagger2 vs. OAS3 each for boot/mvc/cloud? I could see a lot of repetition occurring there as some options (Java8, async, etc.) apply to both.

Definitely learned a lot with this PR and will definitely look to be more thorough in testing further PRs. Some of the mustache's are not features I am currently using so getting familiar with it all.

@welshmHERE is an example where the generatedAnnotation is coming from an included template. I don't think it's necessary for this PR, but it would be nice later to make things more readable/maintainable.

@welshm

Copy link
Copy Markdown
ContributorAuthor

Functionally, I think this is quite good. I would like to see future improvements to readability as time permits. I think it would be nice to break out the OAS3/Swagger annotations into separate sub-templates which get included conditionally so that there isn't quite so much noise.

I'd be more than happy to tackle that - do you have an example or time for a quick discussion on what you imagine the file structure would look like (e.g. a separate file for Swagger2 vs. OAS3 each for boot/mvc/cloud? I could see a lot of repetition occurring there as some options (Java8, async, etc.) apply to both.
Definitely learned a lot with this PR and will definitely look to be more thorough in testing further PRs. Some of the mustache's are not features I am currently using so getting familiar with it all.

@welshmHERE is an example where the generatedAnnotation is coming from an included template. I don't think it's necessary for this PR, but it would be nice later to make things more readable/maintainable.

I'd love to keep making improvements for Spring support (Java and eventually Kotlin) so I'll look to make some of those changes in a future PR

@wing328

Copy link
Copy Markdown
Member

Did a few more tests and the results are good so let's merge this one and file separate PRs for enhancements if needed.

@wing328
wing328 merged commit b117d29 into OpenAPITools:masterNov 2, 2021
@atkawa7

Copy link
Copy Markdown

@wing328 would you be able to do a minor release to test this out

@welshm
welshm deleted the allow_oas3_annotations branch November 3, 2021 01:22
@wing328

Copy link
Copy Markdown
Member

@atkawa7 can you please use the SNAPSHOT version (links in the readme) before v5.3.1 release (which is scheduled a month later)?

@atkawa7

Copy link
Copy Markdown

Thanks @wing328

@mhinders

Copy link
Copy Markdown

Really happy about this change. I would however be inclined to use springdocs for viewing the API definition. As it is currently the Spring controllers are generated with @org.springframework.stereotype.Controller and not @org.springframework.web.bind.annotation.RestController which means that manual configuration is required as explained here https://springdoc.org/#my-rest-controller-using-controller-annotation-is-ignored. Could the templates be changed to use RestController?

@welshm

Copy link
Copy Markdown
ContributorAuthor

Really happy about this change. I would however be inclined to use springdocs for viewing the API definition. As it is currently the Spring controllers are generated with @org.springframework.stereotype.Controller and not @org.springframework.web.bind.annotation.RestController which means that manual configuration is required as explained here https://springdoc.org/#my-rest-controller-using-controller-annotation-is-ignored. Could the templates be changed to use RestController?

It can be updated to do that - just for clarity though, I had added this as an option for the interfaces but had left the generated API controller implementations (apiController.mustache) unchanged - would you be expecting both to be annotated with @RestController? My opinion is probably not, as the interface has all the annotations you need.

@wing328wing328 added this to the 5.3.1 milestone Dec 18, 2021
@BlackSunshine-manage

Copy link
Copy Markdown

Hello! how i can use this plugin?? this is a big work and i waited to long time this. You're really cool!

@Jey2k

Copy link
Copy Markdown

Hi,
Quite a noob in this part, but I'm currently trying to migrate one of our application and I would like to use this generator. So first thanks for your work.
The last problem detected is with "oas3" activated, and a default value on a query param it gives some code not compatible with Swagger v3 annotations:
eg:
,@Parameter(name = "size", description = "Size of the results page (maximum size is 1'000)", defaultValue = "1000") @RequestParam(value = "size", required = false, defaultValue = "1000") Integer size

I suppose it should be included into @Schema, isn't it ?
eg:
,@Parameter(name = "size", description = "Size of the results page (maximum size is 1'000)", schema = @Schema( defaultValue = "1000" )) @RequestParam(value = "size", required = false, defaultValue = "1000") Integer size

@marinus-suniram

Copy link
Copy Markdown
Contributor

I have the same problem with the default value

@welshm

Copy link
Copy Markdown
ContributorAuthor

Please see this change #11181 from @cachescrubber which is addressing the issues of default params and Schema (along with other issues)

@kdebski85

Copy link
Copy Markdown

I also have the issue with defaultValue for Parameter. I created #11203

@mhinders

Copy link
Copy Markdown

Really happy about this change. I would however be inclined to use springdocs for viewing the API definition. As it is currently the Spring controllers are generated with @org.springframework.stereotype.Controller and not @org.springframework.web.bind.annotation.RestController which means that manual configuration is required as explained here https://springdoc.org/#my-rest-controller-using-controller-annotation-is-ignored. Could the templates be changed to use RestController?

It can be updated to do that - just for clarity though, I had added this as an option for the interfaces but had left the generated API controller implementations (apiController.mustache) unchanged - would you be expecting both to be annotated with @RestController? My opinion is probably not, as the interface has all the annotations you need.

I missed that the annotation is present on the interface. That is sufficient for me.

@shivaprasadgurram

Copy link
Copy Markdown

springdoc-openapi-ui not compatible with openapi-generator-maven-plugin. I have a dependency of spring-openapi-ui with version 1.6.9. I can see generated classes are using V3 annotations but when I try to load swagger-ui.html it is not working. Not sure what is going wrong. Can any one help me?

Need: I should be able to open swagger-ui page from browser.

@Moonergfp

Copy link
Copy Markdown

springdoc-openapi-ui not compatible with openapi-generator-maven-plugin. I have a dependency of spring-openapi-ui with version 1.6.9. I can see generated classes are using V3 annotations but when I try to load swagger-ui.html it is not working. Not sure what is going wrong. Can any one help me?

Need: I should be able to open swagger-ui page from browser.

what would be shown when you open swagger-ui page?

Sign up for freeto 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.

[REQ][Java][Spring] Allow Spring generated code to use new OAS 3 annotations

14 participants

@welshm@4brunu@wing328@MichaelKunze@atkawa7@InfoSec812@mhinders@BlackSunshine-manage@Jey2k@marinus-suniram@kdebski85@shivaprasadgurram@Moonergfp@ritual-nik
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Allow Spring generated code to use new OAS 3 annotations - #9775

Merged
wing328 merged 33 commits into
OpenAPITools:masterfrom
welshm:allow_oas3_annotations
Nov 2, 2021
Merged

Allow Spring generated code to use new OAS 3 annotations#9775
wing328 merged 33 commits into
OpenAPITools:masterfrom
welshm:allow_oas3_annotations

Conversation

@welshm

@welshmwelshm commented Jun 15, 2021

Copy link
Copy Markdown
Contributor
  • Add in oas3 option for Spring codegen to use newer annotations

  • Add useSpringController option for Spring codegen

  • Use useSpringfox to fix some unwanted imports for Spring codegen

  • Use jdk8 to add OffsetDateTime import for models in Spring codegen

  • Add JsonValue to enumOuterClass.mustache to allow enums to be
    generated properly

  • To test, use oas3: trueuseSpringController: true and useSpringfox: false in a config file to generate a Spring target.

To close#9774

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/utils/export_docs_generators.sh
    
  • File the PR against the correct branch: master, 5.1.x, 6.0.x
  • If your PR is targeting a particular programming language, @mention the technical committee members, so they are more likely to review the pull request.

welshmand others added 3 commits June 15, 2021 14:23
- Add in `oas3` option for Spring codegen to use newer annotations
- Add `useSpringController` option for Spring codegen
- Use `useSpringfox` to fix some unwanted imports for Spring codegen
- Use `jdk8` to add OffsetDateTime import for models in Spring codegen
- Add `JsonValue` to `enumOuterClass.mustache` to allow enums to be
generated properly
Bring `welshm` fork up to master
@welshm

Copy link
Copy Markdown
ContributorAuthor

I think @diyfr and @nmuesch might be good reviewers for this?

if (!this.apiFirst && !this.reactive) {
additionalProperties.put("useSpringfox", true);
if (this.useSpringfox) {
if (!this.apiFirst && !this.reactive) {

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

minor, can simplify to: this.useSpringFox && !this.apiFirst && !this.reactive

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

I'll add comments - I assume that springFox cannot be used when apiFirst and reactive is enabled but we don't use those options so I wanted it to be clear that this check is separate from the useSpringFox option check

@welshm

Copy link
Copy Markdown
ContributorAuthor

@daonomic or @lwlee2608 Would you be an appropriate reviewer for this?

@welshm

Copy link
Copy Markdown
ContributorAuthor

@wing328 - wondering if you can help me find an appropriate reviewer or how I might go about getting this added?

@welshm

Copy link
Copy Markdown
ContributorAuthor

@4brunu Would you be able to help me get a review started on this? I have not had responses from anyone else so far

@4brunu

Copy link
Copy Markdown
Contributor

You need to copy the java technical committee members for review.

@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) @nmuesch (2021/01)

@welshm

Copy link
Copy Markdown
ContributorAuthor

I'm happy to join or participate in a technical committee if that might help...

@welshm

Copy link
Copy Markdown
ContributorAuthor

@4brunu do you happen to know what the expected response time is for opening a PR and receiving a review or for applying for the technical commmittee?

Part of wanting to contribute back is so that my organization doesn't diverge too much from the project here, but it's now been over a month with no response to opening the PR other than from yourself...

@wing328

Copy link
Copy Markdown
Member

Let me try to take a look tomorrow or later this week.

@welshm

Copy link
Copy Markdown
ContributorAuthor

Let me try to take a look tomorrow or later this week.

Just following up here - I will be unavailalbe Aug 3 - 6 if there is feedback on this PR.

I am very much interested in joining the technical committee for Spring and Java if you're taking applicants (I did send an email) in order to help keep the generator supported for those languages.

@welshm

Copy link
Copy Markdown
ContributorAuthor

@wing328 any chance to get this reviewed?

@welshm

Copy link
Copy Markdown
ContributorAuthor

@wing328 Updated with latest master and regenerated tests/samples

@MichaelKunze

Copy link
Copy Markdown

Would be cool if this PR gets considered! Need this too.

@welshm

Copy link
Copy Markdown
ContributorAuthor

@wing328@4brunu is there anything more I can do to get this reviewed or looked at by someone on the team that can approve this?

This PR has been open for 2+ months, and I've kept it current with the main branch several times, but if no one will review it then there is no value in me maintaining this branch/PR.

I am more than happy to get more involved in the project, but my emails asking to join the team have also gone unanswered.

@InfoSec812

Copy link
Copy Markdown
Contributor

Functionally, I think this is quite good. I would like to see future improvements to readability as time permits. I think it would be nice to break out the OAS3/Swagger annotations into separate sub-templates which get included conditionally so that there isn't quite so much noise.

I'd be more than happy to tackle that - do you have an example or time for a quick discussion on what you imagine the file structure would look like (e.g. a separate file for Swagger2 vs. OAS3 each for boot/mvc/cloud? I could see a lot of repetition occurring there as some options (Java8, async, etc.) apply to both.

Definitely learned a lot with this PR and will definitely look to be more thorough in testing further PRs. Some of the mustache's are not features I am currently using so getting familiar with it all.

@welshmHERE is an example where the generatedAnnotation is coming from an included template. I don't think it's necessary for this PR, but it would be nice later to make things more readable/maintainable.

@welshm

Copy link
Copy Markdown
ContributorAuthor

Functionally, I think this is quite good. I would like to see future improvements to readability as time permits. I think it would be nice to break out the OAS3/Swagger annotations into separate sub-templates which get included conditionally so that there isn't quite so much noise.

I'd be more than happy to tackle that - do you have an example or time for a quick discussion on what you imagine the file structure would look like (e.g. a separate file for Swagger2 vs. OAS3 each for boot/mvc/cloud? I could see a lot of repetition occurring there as some options (Java8, async, etc.) apply to both.
Definitely learned a lot with this PR and will definitely look to be more thorough in testing further PRs. Some of the mustache's are not features I am currently using so getting familiar with it all.

@welshmHERE is an example where the generatedAnnotation is coming from an included template. I don't think it's necessary for this PR, but it would be nice later to make things more readable/maintainable.

I'd love to keep making improvements for Spring support (Java and eventually Kotlin) so I'll look to make some of those changes in a future PR

@wing328

Copy link
Copy Markdown
Member

Did a few more tests and the results are good so let's merge this one and file separate PRs for enhancements if needed.

@wing328
wing328 merged commit b117d29 into OpenAPITools:masterNov 2, 2021
@atkawa7

Copy link
Copy Markdown

@wing328 would you be able to do a minor release to test this out

@welshm
welshm deleted the allow_oas3_annotations branch November 3, 2021 01:22
@wing328

Copy link
Copy Markdown
Member

@atkawa7 can you please use the SNAPSHOT version (links in the readme) before v5.3.1 release (which is scheduled a month later)?

@atkawa7

Copy link
Copy Markdown

Thanks @wing328

@mhinders

Copy link
Copy Markdown

Really happy about this change. I would however be inclined to use springdocs for viewing the API definition. As it is currently the Spring controllers are generated with @org.springframework.stereotype.Controller and not @org.springframework.web.bind.annotation.RestController which means that manual configuration is required as explained here https://springdoc.org/#my-rest-controller-using-controller-annotation-is-ignored. Could the templates be changed to use RestController?

@welshm

Copy link
Copy Markdown
ContributorAuthor

Really happy about this change. I would however be inclined to use springdocs for viewing the API definition. As it is currently the Spring controllers are generated with @org.springframework.stereotype.Controller and not @org.springframework.web.bind.annotation.RestController which means that manual configuration is required as explained here https://springdoc.org/#my-rest-controller-using-controller-annotation-is-ignored. Could the templates be changed to use RestController?

It can be updated to do that - just for clarity though, I had added this as an option for the interfaces but had left the generated API controller implementations (apiController.mustache) unchanged - would you be expecting both to be annotated with @RestController? My opinion is probably not, as the interface has all the annotations you need.

@wing328wing328 added this to the 5.3.1 milestone Dec 18, 2021
@BlackSunshine-manage

Copy link
Copy Markdown

Hello! how i can use this plugin?? this is a big work and i waited to long time this. You're really cool!

@Jey2k

Copy link
Copy Markdown

Hi,
Quite a noob in this part, but I'm currently trying to migrate one of our application and I would like to use this generator. So first thanks for your work.
The last problem detected is with "oas3" activated, and a default value on a query param it gives some code not compatible with Swagger v3 annotations:
eg:
,@Parameter(name = "size", description = "Size of the results page (maximum size is 1'000)", defaultValue = "1000") @RequestParam(value = "size", required = false, defaultValue = "1000") Integer size

I suppose it should be included into @Schema, isn't it ?
eg:
,@Parameter(name = "size", description = "Size of the results page (maximum size is 1'000)", schema = @Schema( defaultValue = "1000" )) @RequestParam(value = "size", required = false, defaultValue = "1000") Integer size

@marinus-suniram

Copy link
Copy Markdown
Contributor

I have the same problem with the default value

@welshm

Copy link
Copy Markdown
ContributorAuthor

Please see this change #11181 from @cachescrubber which is addressing the issues of default params and Schema (along with other issues)

@kdebski85

Copy link
Copy Markdown

I also have the issue with defaultValue for Parameter. I created #11203

@mhinders

Copy link
Copy Markdown

Really happy about this change. I would however be inclined to use springdocs for viewing the API definition. As it is currently the Spring controllers are generated with @org.springframework.stereotype.Controller and not @org.springframework.web.bind.annotation.RestController which means that manual configuration is required as explained here https://springdoc.org/#my-rest-controller-using-controller-annotation-is-ignored. Could the templates be changed to use RestController?

It can be updated to do that - just for clarity though, I had added this as an option for the interfaces but had left the generated API controller implementations (apiController.mustache) unchanged - would you be expecting both to be annotated with @RestController? My opinion is probably not, as the interface has all the annotations you need.

I missed that the annotation is present on the interface. That is sufficient for me.

@shivaprasadgurram

Copy link
Copy Markdown

springdoc-openapi-ui not compatible with openapi-generator-maven-plugin. I have a dependency of spring-openapi-ui with version 1.6.9. I can see generated classes are using V3 annotations but when I try to load swagger-ui.html it is not working. Not sure what is going wrong. Can any one help me?

Need: I should be able to open swagger-ui page from browser.

@Moonergfp

Copy link
Copy Markdown

springdoc-openapi-ui not compatible with openapi-generator-maven-plugin. I have a dependency of spring-openapi-ui with version 1.6.9. I can see generated classes are using V3 annotations but when I try to load swagger-ui.html it is not working. Not sure what is going wrong. Can any one help me?

Need: I should be able to open swagger-ui page from browser.

what would be shown when you open swagger-ui page?

Sign up for freeto 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.

[REQ][Java][Spring] Allow Spring generated code to use new OAS 3 annotations

14 participants

@welshm@4brunu@wing328@MichaelKunze@atkawa7@InfoSec812@mhinders@BlackSunshine-manage@Jey2k@marinus-suniram@kdebski85@shivaprasadgurram@Moonergfp@ritual-nik
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Allow Spring generated code to use new OAS 3 annotations - #9775

Merged
wing328 merged 33 commits into
OpenAPITools:masterfrom
welshm:allow_oas3_annotations
Nov 2, 2021
Merged

Allow Spring generated code to use new OAS 3 annotations#9775
wing328 merged 33 commits into
OpenAPITools:masterfrom
welshm:allow_oas3_annotations

Conversation

@welshm

@welshmwelshm commented Jun 15, 2021

Copy link
Copy Markdown
Contributor
  • Add in oas3 option for Spring codegen to use newer annotations

  • Add useSpringController option for Spring codegen

  • Use useSpringfox to fix some unwanted imports for Spring codegen

  • Use jdk8 to add OffsetDateTime import for models in Spring codegen

  • Add JsonValue to enumOuterClass.mustache to allow enums to be
    generated properly

  • To test, use oas3: trueuseSpringController: true and useSpringfox: false in a config file to generate a Spring target.

To close#9774

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/utils/export_docs_generators.sh
    
  • File the PR against the correct branch: master, 5.1.x, 6.0.x
  • If your PR is targeting a particular programming language, @mention the technical committee members, so they are more likely to review the pull request.

welshmand others added 3 commits June 15, 2021 14:23
- Add in `oas3` option for Spring codegen to use newer annotations
- Add `useSpringController` option for Spring codegen
- Use `useSpringfox` to fix some unwanted imports for Spring codegen
- Use `jdk8` to add OffsetDateTime import for models in Spring codegen
- Add `JsonValue` to `enumOuterClass.mustache` to allow enums to be
generated properly
Bring `welshm` fork up to master
@welshm

Copy link
Copy Markdown
ContributorAuthor

I think @diyfr and @nmuesch might be good reviewers for this?

if (!this.apiFirst && !this.reactive) {
additionalProperties.put("useSpringfox", true);
if (this.useSpringfox) {
if (!this.apiFirst && !this.reactive) {

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

minor, can simplify to: this.useSpringFox && !this.apiFirst && !this.reactive

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

I'll add comments - I assume that springFox cannot be used when apiFirst and reactive is enabled but we don't use those options so I wanted it to be clear that this check is separate from the useSpringFox option check

@welshm

Copy link
Copy Markdown
ContributorAuthor

@daonomic or @lwlee2608 Would you be an appropriate reviewer for this?

@welshm

Copy link
Copy Markdown
ContributorAuthor

@wing328 - wondering if you can help me find an appropriate reviewer or how I might go about getting this added?

@welshm

Copy link
Copy Markdown
ContributorAuthor

@4brunu Would you be able to help me get a review started on this? I have not had responses from anyone else so far

@4brunu

Copy link
Copy Markdown
Contributor

You need to copy the java technical committee members for review.

@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) @nmuesch (2021/01)

@welshm

Copy link
Copy Markdown
ContributorAuthor

I'm happy to join or participate in a technical committee if that might help...

@welshm

Copy link
Copy Markdown
ContributorAuthor

@4brunu do you happen to know what the expected response time is for opening a PR and receiving a review or for applying for the technical commmittee?

Part of wanting to contribute back is so that my organization doesn't diverge too much from the project here, but it's now been over a month with no response to opening the PR other than from yourself...

@wing328

Copy link
Copy Markdown
Member

Let me try to take a look tomorrow or later this week.

@welshm

Copy link
Copy Markdown
ContributorAuthor

Let me try to take a look tomorrow or later this week.

Just following up here - I will be unavailalbe Aug 3 - 6 if there is feedback on this PR.

I am very much interested in joining the technical committee for Spring and Java if you're taking applicants (I did send an email) in order to help keep the generator supported for those languages.

@welshm

Copy link
Copy Markdown
ContributorAuthor

@wing328 any chance to get this reviewed?

@welshm

Copy link
Copy Markdown
ContributorAuthor

@wing328 Updated with latest master and regenerated tests/samples

@MichaelKunze

Copy link
Copy Markdown

Would be cool if this PR gets considered! Need this too.

@welshm

Copy link
Copy Markdown
ContributorAuthor

@wing328@4brunu is there anything more I can do to get this reviewed or looked at by someone on the team that can approve this?

This PR has been open for 2+ months, and I've kept it current with the main branch several times, but if no one will review it then there is no value in me maintaining this branch/PR.

I am more than happy to get more involved in the project, but my emails asking to join the team have also gone unanswered.

@InfoSec812

Copy link
Copy Markdown
Contributor

Functionally, I think this is quite good. I would like to see future improvements to readability as time permits. I think it would be nice to break out the OAS3/Swagger annotations into separate sub-templates which get included conditionally so that there isn't quite so much noise.

I'd be more than happy to tackle that - do you have an example or time for a quick discussion on what you imagine the file structure would look like (e.g. a separate file for Swagger2 vs. OAS3 each for boot/mvc/cloud? I could see a lot of repetition occurring there as some options (Java8, async, etc.) apply to both.

Definitely learned a lot with this PR and will definitely look to be more thorough in testing further PRs. Some of the mustache's are not features I am currently using so getting familiar with it all.

@welshmHERE is an example where the generatedAnnotation is coming from an included template. I don't think it's necessary for this PR, but it would be nice later to make things more readable/maintainable.

@welshm

Copy link
Copy Markdown
ContributorAuthor

Functionally, I think this is quite good. I would like to see future improvements to readability as time permits. I think it would be nice to break out the OAS3/Swagger annotations into separate sub-templates which get included conditionally so that there isn't quite so much noise.

I'd be more than happy to tackle that - do you have an example or time for a quick discussion on what you imagine the file structure would look like (e.g. a separate file for Swagger2 vs. OAS3 each for boot/mvc/cloud? I could see a lot of repetition occurring there as some options (Java8, async, etc.) apply to both.
Definitely learned a lot with this PR and will definitely look to be more thorough in testing further PRs. Some of the mustache's are not features I am currently using so getting familiar with it all.

@welshmHERE is an example where the generatedAnnotation is coming from an included template. I don't think it's necessary for this PR, but it would be nice later to make things more readable/maintainable.

I'd love to keep making improvements for Spring support (Java and eventually Kotlin) so I'll look to make some of those changes in a future PR

@wing328

Copy link
Copy Markdown
Member

Did a few more tests and the results are good so let's merge this one and file separate PRs for enhancements if needed.

@wing328
wing328 merged commit b117d29 into OpenAPITools:masterNov 2, 2021
@atkawa7

Copy link
Copy Markdown

@wing328 would you be able to do a minor release to test this out

@welshm
welshm deleted the allow_oas3_annotations branch November 3, 2021 01:22
@wing328

Copy link
Copy Markdown
Member

@atkawa7 can you please use the SNAPSHOT version (links in the readme) before v5.3.1 release (which is scheduled a month later)?

@atkawa7

Copy link
Copy Markdown

Thanks @wing328

@mhinders

Copy link
Copy Markdown

Really happy about this change. I would however be inclined to use springdocs for viewing the API definition. As it is currently the Spring controllers are generated with @org.springframework.stereotype.Controller and not @org.springframework.web.bind.annotation.RestController which means that manual configuration is required as explained here https://springdoc.org/#my-rest-controller-using-controller-annotation-is-ignored. Could the templates be changed to use RestController?

@welshm

Copy link
Copy Markdown
ContributorAuthor

Really happy about this change. I would however be inclined to use springdocs for viewing the API definition. As it is currently the Spring controllers are generated with @org.springframework.stereotype.Controller and not @org.springframework.web.bind.annotation.RestController which means that manual configuration is required as explained here https://springdoc.org/#my-rest-controller-using-controller-annotation-is-ignored. Could the templates be changed to use RestController?

It can be updated to do that - just for clarity though, I had added this as an option for the interfaces but had left the generated API controller implementations (apiController.mustache) unchanged - would you be expecting both to be annotated with @RestController? My opinion is probably not, as the interface has all the annotations you need.

@wing328wing328 added this to the 5.3.1 milestone Dec 18, 2021
@BlackSunshine-manage

Copy link
Copy Markdown

Hello! how i can use this plugin?? this is a big work and i waited to long time this. You're really cool!

@Jey2k

Copy link
Copy Markdown

Hi,
Quite a noob in this part, but I'm currently trying to migrate one of our application and I would like to use this generator. So first thanks for your work.
The last problem detected is with "oas3" activated, and a default value on a query param it gives some code not compatible with Swagger v3 annotations:
eg:
,@Parameter(name = "size", description = "Size of the results page (maximum size is 1'000)", defaultValue = "1000") @RequestParam(value = "size", required = false, defaultValue = "1000") Integer size

I suppose it should be included into @Schema, isn't it ?
eg:
,@Parameter(name = "size", description = "Size of the results page (maximum size is 1'000)", schema = @Schema( defaultValue = "1000" )) @RequestParam(value = "size", required = false, defaultValue = "1000") Integer size

@marinus-suniram

Copy link
Copy Markdown
Contributor

I have the same problem with the default value

@welshm

Copy link
Copy Markdown
ContributorAuthor

Please see this change #11181 from @cachescrubber which is addressing the issues of default params and Schema (along with other issues)

@kdebski85

Copy link
Copy Markdown

I also have the issue with defaultValue for Parameter. I created #11203

@mhinders

Copy link
Copy Markdown

Really happy about this change. I would however be inclined to use springdocs for viewing the API definition. As it is currently the Spring controllers are generated with @org.springframework.stereotype.Controller and not @org.springframework.web.bind.annotation.RestController which means that manual configuration is required as explained here https://springdoc.org/#my-rest-controller-using-controller-annotation-is-ignored. Could the templates be changed to use RestController?

It can be updated to do that - just for clarity though, I had added this as an option for the interfaces but had left the generated API controller implementations (apiController.mustache) unchanged - would you be expecting both to be annotated with @RestController? My opinion is probably not, as the interface has all the annotations you need.

I missed that the annotation is present on the interface. That is sufficient for me.

@shivaprasadgurram

Copy link
Copy Markdown

springdoc-openapi-ui not compatible with openapi-generator-maven-plugin. I have a dependency of spring-openapi-ui with version 1.6.9. I can see generated classes are using V3 annotations but when I try to load swagger-ui.html it is not working. Not sure what is going wrong. Can any one help me?

Need: I should be able to open swagger-ui page from browser.

@Moonergfp

Copy link
Copy Markdown

springdoc-openapi-ui not compatible with openapi-generator-maven-plugin. I have a dependency of spring-openapi-ui with version 1.6.9. I can see generated classes are using V3 annotations but when I try to load swagger-ui.html it is not working. Not sure what is going wrong. Can any one help me?

Need: I should be able to open swagger-ui page from browser.

what would be shown when you open swagger-ui page?

Sign up for freeto 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.

[REQ][Java][Spring] Allow Spring generated code to use new OAS 3 annotations

14 participants

@welshm@4brunu@wing328@MichaelKunze@atkawa7@InfoSec812@mhinders@BlackSunshine-manage@Jey2k@marinus-suniram@kdebski85@shivaprasadgurram@Moonergfp@ritual-nik
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Allow Spring generated code to use new OAS 3 annotations - #9775

Merged
wing328 merged 33 commits into
OpenAPITools:masterfrom
welshm:allow_oas3_annotations
Nov 2, 2021
Merged

Allow Spring generated code to use new OAS 3 annotations#9775
wing328 merged 33 commits into
OpenAPITools:masterfrom
welshm:allow_oas3_annotations

Conversation

@welshm

@welshmwelshm commented Jun 15, 2021

Copy link
Copy Markdown
Contributor
  • Add in oas3 option for Spring codegen to use newer annotations

  • Add useSpringController option for Spring codegen

  • Use useSpringfox to fix some unwanted imports for Spring codegen

  • Use jdk8 to add OffsetDateTime import for models in Spring codegen

  • Add JsonValue to enumOuterClass.mustache to allow enums to be
    generated properly

  • To test, use oas3: trueuseSpringController: true and useSpringfox: false in a config file to generate a Spring target.

To close#9774

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/utils/export_docs_generators.sh
    
  • File the PR against the correct branch: master, 5.1.x, 6.0.x
  • If your PR is targeting a particular programming language, @mention the technical committee members, so they are more likely to review the pull request.

welshmand others added 3 commits June 15, 2021 14:23
- Add in `oas3` option for Spring codegen to use newer annotations
- Add `useSpringController` option for Spring codegen
- Use `useSpringfox` to fix some unwanted imports for Spring codegen
- Use `jdk8` to add OffsetDateTime import for models in Spring codegen
- Add `JsonValue` to `enumOuterClass.mustache` to allow enums to be
generated properly
Bring `welshm` fork up to master
@welshm

Copy link
Copy Markdown
ContributorAuthor

I think @diyfr and @nmuesch might be good reviewers for this?

if (!this.apiFirst && !this.reactive) {
additionalProperties.put("useSpringfox", true);
if (this.useSpringfox) {
if (!this.apiFirst && !this.reactive) {

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

minor, can simplify to: this.useSpringFox && !this.apiFirst && !this.reactive

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

I'll add comments - I assume that springFox cannot be used when apiFirst and reactive is enabled but we don't use those options so I wanted it to be clear that this check is separate from the useSpringFox option check

@welshm

Copy link
Copy Markdown
ContributorAuthor

@daonomic or @lwlee2608 Would you be an appropriate reviewer for this?

@welshm

Copy link
Copy Markdown
ContributorAuthor

@wing328 - wondering if you can help me find an appropriate reviewer or how I might go about getting this added?

@welshm

Copy link
Copy Markdown
ContributorAuthor

@4brunu Would you be able to help me get a review started on this? I have not had responses from anyone else so far

@4brunu

Copy link
Copy Markdown
Contributor

You need to copy the java technical committee members for review.

@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) @nmuesch (2021/01)

@welshm

Copy link
Copy Markdown
ContributorAuthor

I'm happy to join or participate in a technical committee if that might help...

@welshm

Copy link
Copy Markdown
ContributorAuthor

@4brunu do you happen to know what the expected response time is for opening a PR and receiving a review or for applying for the technical commmittee?

Part of wanting to contribute back is so that my organization doesn't diverge too much from the project here, but it's now been over a month with no response to opening the PR other than from yourself...

@wing328

Copy link
Copy Markdown
Member

Let me try to take a look tomorrow or later this week.

@welshm

Copy link
Copy Markdown
ContributorAuthor

Let me try to take a look tomorrow or later this week.

Just following up here - I will be unavailalbe Aug 3 - 6 if there is feedback on this PR.

I am very much interested in joining the technical committee for Spring and Java if you're taking applicants (I did send an email) in order to help keep the generator supported for those languages.

@welshm

Copy link
Copy Markdown
ContributorAuthor

@wing328 any chance to get this reviewed?

@welshm

Copy link
Copy Markdown
ContributorAuthor

@wing328 Updated with latest master and regenerated tests/samples

@MichaelKunze

Copy link
Copy Markdown

Would be cool if this PR gets considered! Need this too.

@welshm

Copy link
Copy Markdown
ContributorAuthor

@wing328@4brunu is there anything more I can do to get this reviewed or looked at by someone on the team that can approve this?

This PR has been open for 2+ months, and I've kept it current with the main branch several times, but if no one will review it then there is no value in me maintaining this branch/PR.

I am more than happy to get more involved in the project, but my emails asking to join the team have also gone unanswered.

@InfoSec812

Copy link
Copy Markdown
Contributor

Functionally, I think this is quite good. I would like to see future improvements to readability as time permits. I think it would be nice to break out the OAS3/Swagger annotations into separate sub-templates which get included conditionally so that there isn't quite so much noise.

I'd be more than happy to tackle that - do you have an example or time for a quick discussion on what you imagine the file structure would look like (e.g. a separate file for Swagger2 vs. OAS3 each for boot/mvc/cloud? I could see a lot of repetition occurring there as some options (Java8, async, etc.) apply to both.

Definitely learned a lot with this PR and will definitely look to be more thorough in testing further PRs. Some of the mustache's are not features I am currently using so getting familiar with it all.

@welshmHERE is an example where the generatedAnnotation is coming from an included template. I don't think it's necessary for this PR, but it would be nice later to make things more readable/maintainable.

@welshm

Copy link
Copy Markdown
ContributorAuthor

Functionally, I think this is quite good. I would like to see future improvements to readability as time permits. I think it would be nice to break out the OAS3/Swagger annotations into separate sub-templates which get included conditionally so that there isn't quite so much noise.

I'd be more than happy to tackle that - do you have an example or time for a quick discussion on what you imagine the file structure would look like (e.g. a separate file for Swagger2 vs. OAS3 each for boot/mvc/cloud? I could see a lot of repetition occurring there as some options (Java8, async, etc.) apply to both.
Definitely learned a lot with this PR and will definitely look to be more thorough in testing further PRs. Some of the mustache's are not features I am currently using so getting familiar with it all.

@welshmHERE is an example where the generatedAnnotation is coming from an included template. I don't think it's necessary for this PR, but it would be nice later to make things more readable/maintainable.

I'd love to keep making improvements for Spring support (Java and eventually Kotlin) so I'll look to make some of those changes in a future PR

@wing328

Copy link
Copy Markdown
Member

Did a few more tests and the results are good so let's merge this one and file separate PRs for enhancements if needed.

@wing328
wing328 merged commit b117d29 into OpenAPITools:masterNov 2, 2021
@atkawa7

Copy link
Copy Markdown

@wing328 would you be able to do a minor release to test this out

@welshm
welshm deleted the allow_oas3_annotations branch November 3, 2021 01:22
@wing328

Copy link
Copy Markdown
Member

@atkawa7 can you please use the SNAPSHOT version (links in the readme) before v5.3.1 release (which is scheduled a month later)?

@atkawa7

Copy link
Copy Markdown

Thanks @wing328

@mhinders

Copy link
Copy Markdown

Really happy about this change. I would however be inclined to use springdocs for viewing the API definition. As it is currently the Spring controllers are generated with @org.springframework.stereotype.Controller and not @org.springframework.web.bind.annotation.RestController which means that manual configuration is required as explained here https://springdoc.org/#my-rest-controller-using-controller-annotation-is-ignored. Could the templates be changed to use RestController?

@welshm

Copy link
Copy Markdown
ContributorAuthor

Really happy about this change. I would however be inclined to use springdocs for viewing the API definition. As it is currently the Spring controllers are generated with @org.springframework.stereotype.Controller and not @org.springframework.web.bind.annotation.RestController which means that manual configuration is required as explained here https://springdoc.org/#my-rest-controller-using-controller-annotation-is-ignored. Could the templates be changed to use RestController?

It can be updated to do that - just for clarity though, I had added this as an option for the interfaces but had left the generated API controller implementations (apiController.mustache) unchanged - would you be expecting both to be annotated with @RestController? My opinion is probably not, as the interface has all the annotations you need.

@wing328wing328 added this to the 5.3.1 milestone Dec 18, 2021
@BlackSunshine-manage

Copy link
Copy Markdown

Hello! how i can use this plugin?? this is a big work and i waited to long time this. You're really cool!

@Jey2k

Copy link
Copy Markdown

Hi,
Quite a noob in this part, but I'm currently trying to migrate one of our application and I would like to use this generator. So first thanks for your work.
The last problem detected is with "oas3" activated, and a default value on a query param it gives some code not compatible with Swagger v3 annotations:
eg:
,@Parameter(name = "size", description = "Size of the results page (maximum size is 1'000)", defaultValue = "1000") @RequestParam(value = "size", required = false, defaultValue = "1000") Integer size

I suppose it should be included into @Schema, isn't it ?
eg:
,@Parameter(name = "size", description = "Size of the results page (maximum size is 1'000)", schema = @Schema( defaultValue = "1000" )) @RequestParam(value = "size", required = false, defaultValue = "1000") Integer size

@marinus-suniram

Copy link
Copy Markdown
Contributor

I have the same problem with the default value

@welshm

Copy link
Copy Markdown
ContributorAuthor

Please see this change #11181 from @cachescrubber which is addressing the issues of default params and Schema (along with other issues)

@kdebski85

Copy link
Copy Markdown

I also have the issue with defaultValue for Parameter. I created #11203

@mhinders

Copy link
Copy Markdown

Really happy about this change. I would however be inclined to use springdocs for viewing the API definition. As it is currently the Spring controllers are generated with @org.springframework.stereotype.Controller and not @org.springframework.web.bind.annotation.RestController which means that manual configuration is required as explained here https://springdoc.org/#my-rest-controller-using-controller-annotation-is-ignored. Could the templates be changed to use RestController?

It can be updated to do that - just for clarity though, I had added this as an option for the interfaces but had left the generated API controller implementations (apiController.mustache) unchanged - would you be expecting both to be annotated with @RestController? My opinion is probably not, as the interface has all the annotations you need.

I missed that the annotation is present on the interface. That is sufficient for me.

@shivaprasadgurram

Copy link
Copy Markdown

springdoc-openapi-ui not compatible with openapi-generator-maven-plugin. I have a dependency of spring-openapi-ui with version 1.6.9. I can see generated classes are using V3 annotations but when I try to load swagger-ui.html it is not working. Not sure what is going wrong. Can any one help me?

Need: I should be able to open swagger-ui page from browser.

@Moonergfp

Copy link
Copy Markdown

springdoc-openapi-ui not compatible with openapi-generator-maven-plugin. I have a dependency of spring-openapi-ui with version 1.6.9. I can see generated classes are using V3 annotations but when I try to load swagger-ui.html it is not working. Not sure what is going wrong. Can any one help me?

Need: I should be able to open swagger-ui page from browser.

what would be shown when you open swagger-ui page?

Sign up for freeto 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.

[REQ][Java][Spring] Allow Spring generated code to use new OAS 3 annotations

14 participants

@welshm@4brunu@wing328@MichaelKunze@atkawa7@InfoSec812@mhinders@BlackSunshine-manage@Jey2k@marinus-suniram@kdebski85@shivaprasadgurram@Moonergfp@ritual-nik
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Allow Spring generated code to use new OAS 3 annotations - #9775

Merged
wing328 merged 33 commits into
OpenAPITools:masterfrom
welshm:allow_oas3_annotations
Nov 2, 2021
Merged

Allow Spring generated code to use new OAS 3 annotations#9775
wing328 merged 33 commits into
OpenAPITools:masterfrom
welshm:allow_oas3_annotations

Conversation

@welshm

@welshmwelshm commented Jun 15, 2021

Copy link
Copy Markdown
Contributor
  • Add in oas3 option for Spring codegen to use newer annotations

  • Add useSpringController option for Spring codegen

  • Use useSpringfox to fix some unwanted imports for Spring codegen

  • Use jdk8 to add OffsetDateTime import for models in Spring codegen

  • Add JsonValue to enumOuterClass.mustache to allow enums to be
    generated properly

  • To test, use oas3: trueuseSpringController: true and useSpringfox: false in a config file to generate a Spring target.

To close#9774

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/utils/export_docs_generators.sh
    
  • File the PR against the correct branch: master, 5.1.x, 6.0.x
  • If your PR is targeting a particular programming language, @mention the technical committee members, so they are more likely to review the pull request.

welshmand others added 3 commits June 15, 2021 14:23
- Add in `oas3` option for Spring codegen to use newer annotations
- Add `useSpringController` option for Spring codegen
- Use `useSpringfox` to fix some unwanted imports for Spring codegen
- Use `jdk8` to add OffsetDateTime import for models in Spring codegen
- Add `JsonValue` to `enumOuterClass.mustache` to allow enums to be
generated properly
Bring `welshm` fork up to master
@welshm

Copy link
Copy Markdown
ContributorAuthor

I think @diyfr and @nmuesch might be good reviewers for this?

if (!this.apiFirst && !this.reactive) {
additionalProperties.put("useSpringfox", true);
if (this.useSpringfox) {
if (!this.apiFirst && !this.reactive) {

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

minor, can simplify to: this.useSpringFox && !this.apiFirst && !this.reactive

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

I'll add comments - I assume that springFox cannot be used when apiFirst and reactive is enabled but we don't use those options so I wanted it to be clear that this check is separate from the useSpringFox option check

@welshm

Copy link
Copy Markdown
ContributorAuthor

@daonomic or @lwlee2608 Would you be an appropriate reviewer for this?

@welshm

Copy link
Copy Markdown
ContributorAuthor

@wing328 - wondering if you can help me find an appropriate reviewer or how I might go about getting this added?

@welshm

Copy link
Copy Markdown
ContributorAuthor

@4brunu Would you be able to help me get a review started on this? I have not had responses from anyone else so far

@4brunu

Copy link
Copy Markdown
Contributor

You need to copy the java technical committee members for review.

@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) @nmuesch (2021/01)

@welshm

Copy link
Copy Markdown
ContributorAuthor

I'm happy to join or participate in a technical committee if that might help...

@welshm

Copy link
Copy Markdown
ContributorAuthor

@4brunu do you happen to know what the expected response time is for opening a PR and receiving a review or for applying for the technical commmittee?

Part of wanting to contribute back is so that my organization doesn't diverge too much from the project here, but it's now been over a month with no response to opening the PR other than from yourself...

@wing328

Copy link
Copy Markdown
Member

Let me try to take a look tomorrow or later this week.

@welshm

Copy link
Copy Markdown
ContributorAuthor

Let me try to take a look tomorrow or later this week.

Just following up here - I will be unavailalbe Aug 3 - 6 if there is feedback on this PR.

I am very much interested in joining the technical committee for Spring and Java if you're taking applicants (I did send an email) in order to help keep the generator supported for those languages.

@welshm

Copy link
Copy Markdown
ContributorAuthor

@wing328 any chance to get this reviewed?

@welshm

Copy link
Copy Markdown
ContributorAuthor

@wing328 Updated with latest master and regenerated tests/samples

@MichaelKunze

Copy link
Copy Markdown

Would be cool if this PR gets considered! Need this too.

@welshm

Copy link
Copy Markdown
ContributorAuthor

@wing328@4brunu is there anything more I can do to get this reviewed or looked at by someone on the team that can approve this?

This PR has been open for 2+ months, and I've kept it current with the main branch several times, but if no one will review it then there is no value in me maintaining this branch/PR.

I am more than happy to get more involved in the project, but my emails asking to join the team have also gone unanswered.

@InfoSec812

Copy link
Copy Markdown
Contributor

Functionally, I think this is quite good. I would like to see future improvements to readability as time permits. I think it would be nice to break out the OAS3/Swagger annotations into separate sub-templates which get included conditionally so that there isn't quite so much noise.

I'd be more than happy to tackle that - do you have an example or time for a quick discussion on what you imagine the file structure would look like (e.g. a separate file for Swagger2 vs. OAS3 each for boot/mvc/cloud? I could see a lot of repetition occurring there as some options (Java8, async, etc.) apply to both.

Definitely learned a lot with this PR and will definitely look to be more thorough in testing further PRs. Some of the mustache's are not features I am currently using so getting familiar with it all.

@welshmHERE is an example where the generatedAnnotation is coming from an included template. I don't think it's necessary for this PR, but it would be nice later to make things more readable/maintainable.

@welshm

Copy link
Copy Markdown
ContributorAuthor

Functionally, I think this is quite good. I would like to see future improvements to readability as time permits. I think it would be nice to break out the OAS3/Swagger annotations into separate sub-templates which get included conditionally so that there isn't quite so much noise.

I'd be more than happy to tackle that - do you have an example or time for a quick discussion on what you imagine the file structure would look like (e.g. a separate file for Swagger2 vs. OAS3 each for boot/mvc/cloud? I could see a lot of repetition occurring there as some options (Java8, async, etc.) apply to both.
Definitely learned a lot with this PR and will definitely look to be more thorough in testing further PRs. Some of the mustache's are not features I am currently using so getting familiar with it all.

@welshmHERE is an example where the generatedAnnotation is coming from an included template. I don't think it's necessary for this PR, but it would be nice later to make things more readable/maintainable.

I'd love to keep making improvements for Spring support (Java and eventually Kotlin) so I'll look to make some of those changes in a future PR

@wing328

Copy link
Copy Markdown
Member

Did a few more tests and the results are good so let's merge this one and file separate PRs for enhancements if needed.

@wing328
wing328 merged commit b117d29 into OpenAPITools:masterNov 2, 2021
@atkawa7

Copy link
Copy Markdown

@wing328 would you be able to do a minor release to test this out

@welshm
welshm deleted the allow_oas3_annotations branch November 3, 2021 01:22
@wing328

Copy link
Copy Markdown
Member

@atkawa7 can you please use the SNAPSHOT version (links in the readme) before v5.3.1 release (which is scheduled a month later)?

@atkawa7

Copy link
Copy Markdown

Thanks @wing328

@mhinders

Copy link
Copy Markdown

Really happy about this change. I would however be inclined to use springdocs for viewing the API definition. As it is currently the Spring controllers are generated with @org.springframework.stereotype.Controller and not @org.springframework.web.bind.annotation.RestController which means that manual configuration is required as explained here https://springdoc.org/#my-rest-controller-using-controller-annotation-is-ignored. Could the templates be changed to use RestController?

@welshm

Copy link
Copy Markdown
ContributorAuthor

Really happy about this change. I would however be inclined to use springdocs for viewing the API definition. As it is currently the Spring controllers are generated with @org.springframework.stereotype.Controller and not @org.springframework.web.bind.annotation.RestController which means that manual configuration is required as explained here https://springdoc.org/#my-rest-controller-using-controller-annotation-is-ignored. Could the templates be changed to use RestController?

It can be updated to do that - just for clarity though, I had added this as an option for the interfaces but had left the generated API controller implementations (apiController.mustache) unchanged - would you be expecting both to be annotated with @RestController? My opinion is probably not, as the interface has all the annotations you need.

@wing328wing328 added this to the 5.3.1 milestone Dec 18, 2021
@BlackSunshine-manage

Copy link
Copy Markdown

Hello! how i can use this plugin?? this is a big work and i waited to long time this. You're really cool!

@Jey2k

Copy link
Copy Markdown

Hi,
Quite a noob in this part, but I'm currently trying to migrate one of our application and I would like to use this generator. So first thanks for your work.
The last problem detected is with "oas3" activated, and a default value on a query param it gives some code not compatible with Swagger v3 annotations:
eg:
,@Parameter(name = "size", description = "Size of the results page (maximum size is 1'000)", defaultValue = "1000") @RequestParam(value = "size", required = false, defaultValue = "1000") Integer size

I suppose it should be included into @Schema, isn't it ?
eg:
,@Parameter(name = "size", description = "Size of the results page (maximum size is 1'000)", schema = @Schema( defaultValue = "1000" )) @RequestParam(value = "size", required = false, defaultValue = "1000") Integer size

@marinus-suniram

Copy link
Copy Markdown
Contributor

I have the same problem with the default value

@welshm

Copy link
Copy Markdown
ContributorAuthor

Please see this change #11181 from @cachescrubber which is addressing the issues of default params and Schema (along with other issues)

@kdebski85

Copy link
Copy Markdown

I also have the issue with defaultValue for Parameter. I created #11203

@mhinders

Copy link
Copy Markdown

Really happy about this change. I would however be inclined to use springdocs for viewing the API definition. As it is currently the Spring controllers are generated with @org.springframework.stereotype.Controller and not @org.springframework.web.bind.annotation.RestController which means that manual configuration is required as explained here https://springdoc.org/#my-rest-controller-using-controller-annotation-is-ignored. Could the templates be changed to use RestController?

It can be updated to do that - just for clarity though, I had added this as an option for the interfaces but had left the generated API controller implementations (apiController.mustache) unchanged - would you be expecting both to be annotated with @RestController? My opinion is probably not, as the interface has all the annotations you need.

I missed that the annotation is present on the interface. That is sufficient for me.

@shivaprasadgurram

Copy link
Copy Markdown

springdoc-openapi-ui not compatible with openapi-generator-maven-plugin. I have a dependency of spring-openapi-ui with version 1.6.9. I can see generated classes are using V3 annotations but when I try to load swagger-ui.html it is not working. Not sure what is going wrong. Can any one help me?

Need: I should be able to open swagger-ui page from browser.

@Moonergfp

Copy link
Copy Markdown

springdoc-openapi-ui not compatible with openapi-generator-maven-plugin. I have a dependency of spring-openapi-ui with version 1.6.9. I can see generated classes are using V3 annotations but when I try to load swagger-ui.html it is not working. Not sure what is going wrong. Can any one help me?

Need: I should be able to open swagger-ui page from browser.

what would be shown when you open swagger-ui page?

Sign up for freeto 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.

[REQ][Java][Spring] Allow Spring generated code to use new OAS 3 annotations

14 participants

@welshm@4brunu@wing328@MichaelKunze@atkawa7@InfoSec812@mhinders@BlackSunshine-manage@Jey2k@marinus-suniram@kdebski85@shivaprasadgurram@Moonergfp@ritual-nik
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Allow Spring generated code to use new OAS 3 annotations - #9775

Merged
wing328 merged 33 commits into
OpenAPITools:masterfrom
welshm:allow_oas3_annotations
Nov 2, 2021
Merged

Allow Spring generated code to use new OAS 3 annotations#9775
wing328 merged 33 commits into
OpenAPITools:masterfrom
welshm:allow_oas3_annotations

Conversation

@welshm

@welshmwelshm commented Jun 15, 2021

Copy link
Copy Markdown
Contributor
  • Add in oas3 option for Spring codegen to use newer annotations

  • Add useSpringController option for Spring codegen

  • Use useSpringfox to fix some unwanted imports for Spring codegen

  • Use jdk8 to add OffsetDateTime import for models in Spring codegen

  • Add JsonValue to enumOuterClass.mustache to allow enums to be
    generated properly

  • To test, use oas3: trueuseSpringController: true and useSpringfox: false in a config file to generate a Spring target.

To close#9774

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/utils/export_docs_generators.sh
    
  • File the PR against the correct branch: master, 5.1.x, 6.0.x
  • If your PR is targeting a particular programming language, @mention the technical committee members, so they are more likely to review the pull request.

welshmand others added 3 commits June 15, 2021 14:23
- Add in `oas3` option for Spring codegen to use newer annotations
- Add `useSpringController` option for Spring codegen
- Use `useSpringfox` to fix some unwanted imports for Spring codegen
- Use `jdk8` to add OffsetDateTime import for models in Spring codegen
- Add `JsonValue` to `enumOuterClass.mustache` to allow enums to be
generated properly
Bring `welshm` fork up to master
@welshm

Copy link
Copy Markdown
ContributorAuthor

I think @diyfr and @nmuesch might be good reviewers for this?

if (!this.apiFirst && !this.reactive) {
additionalProperties.put("useSpringfox", true);
if (this.useSpringfox) {
if (!this.apiFirst && !this.reactive) {

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

minor, can simplify to: this.useSpringFox && !this.apiFirst && !this.reactive

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

I'll add comments - I assume that springFox cannot be used when apiFirst and reactive is enabled but we don't use those options so I wanted it to be clear that this check is separate from the useSpringFox option check

@welshm

Copy link
Copy Markdown
ContributorAuthor

@daonomic or @lwlee2608 Would you be an appropriate reviewer for this?

@welshm

Copy link
Copy Markdown
ContributorAuthor

@wing328 - wondering if you can help me find an appropriate reviewer or how I might go about getting this added?

@welshm

Copy link
Copy Markdown
ContributorAuthor

@4brunu Would you be able to help me get a review started on this? I have not had responses from anyone else so far

@4brunu

Copy link
Copy Markdown
Contributor

You need to copy the java technical committee members for review.

@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) @nmuesch (2021/01)

@welshm

Copy link
Copy Markdown
ContributorAuthor

I'm happy to join or participate in a technical committee if that might help...

@welshm

Copy link
Copy Markdown
ContributorAuthor

@4brunu do you happen to know what the expected response time is for opening a PR and receiving a review or for applying for the technical commmittee?

Part of wanting to contribute back is so that my organization doesn't diverge too much from the project here, but it's now been over a month with no response to opening the PR other than from yourself...

@wing328

Copy link
Copy Markdown
Member

Let me try to take a look tomorrow or later this week.

@welshm

Copy link
Copy Markdown
ContributorAuthor

Let me try to take a look tomorrow or later this week.

Just following up here - I will be unavailalbe Aug 3 - 6 if there is feedback on this PR.

I am very much interested in joining the technical committee for Spring and Java if you're taking applicants (I did send an email) in order to help keep the generator supported for those languages.

@welshm

Copy link
Copy Markdown
ContributorAuthor

@wing328 any chance to get this reviewed?

@welshm

Copy link
Copy Markdown
ContributorAuthor

@wing328 Updated with latest master and regenerated tests/samples

@MichaelKunze

Copy link
Copy Markdown

Would be cool if this PR gets considered! Need this too.

@welshm

Copy link
Copy Markdown
ContributorAuthor

@wing328@4brunu is there anything more I can do to get this reviewed or looked at by someone on the team that can approve this?

This PR has been open for 2+ months, and I've kept it current with the main branch several times, but if no one will review it then there is no value in me maintaining this branch/PR.

I am more than happy to get more involved in the project, but my emails asking to join the team have also gone unanswered.

@InfoSec812

Copy link
Copy Markdown
Contributor

Functionally, I think this is quite good. I would like to see future improvements to readability as time permits. I think it would be nice to break out the OAS3/Swagger annotations into separate sub-templates which get included conditionally so that there isn't quite so much noise.

I'd be more than happy to tackle that - do you have an example or time for a quick discussion on what you imagine the file structure would look like (e.g. a separate file for Swagger2 vs. OAS3 each for boot/mvc/cloud? I could see a lot of repetition occurring there as some options (Java8, async, etc.) apply to both.

Definitely learned a lot with this PR and will definitely look to be more thorough in testing further PRs. Some of the mustache's are not features I am currently using so getting familiar with it all.

@welshmHERE is an example where the generatedAnnotation is coming from an included template. I don't think it's necessary for this PR, but it would be nice later to make things more readable/maintainable.

@welshm

Copy link
Copy Markdown
ContributorAuthor

Functionally, I think this is quite good. I would like to see future improvements to readability as time permits. I think it would be nice to break out the OAS3/Swagger annotations into separate sub-templates which get included conditionally so that there isn't quite so much noise.

I'd be more than happy to tackle that - do you have an example or time for a quick discussion on what you imagine the file structure would look like (e.g. a separate file for Swagger2 vs. OAS3 each for boot/mvc/cloud? I could see a lot of repetition occurring there as some options (Java8, async, etc.) apply to both.
Definitely learned a lot with this PR and will definitely look to be more thorough in testing further PRs. Some of the mustache's are not features I am currently using so getting familiar with it all.

@welshmHERE is an example where the generatedAnnotation is coming from an included template. I don't think it's necessary for this PR, but it would be nice later to make things more readable/maintainable.

I'd love to keep making improvements for Spring support (Java and eventually Kotlin) so I'll look to make some of those changes in a future PR

@wing328

Copy link
Copy Markdown
Member

Did a few more tests and the results are good so let's merge this one and file separate PRs for enhancements if needed.

@wing328
wing328 merged commit b117d29 into OpenAPITools:masterNov 2, 2021
@atkawa7

Copy link
Copy Markdown

@wing328 would you be able to do a minor release to test this out

@welshm
welshm deleted the allow_oas3_annotations branch November 3, 2021 01:22
@wing328

Copy link
Copy Markdown
Member

@atkawa7 can you please use the SNAPSHOT version (links in the readme) before v5.3.1 release (which is scheduled a month later)?

@atkawa7

Copy link
Copy Markdown

Thanks @wing328

@mhinders

Copy link
Copy Markdown

Really happy about this change. I would however be inclined to use springdocs for viewing the API definition. As it is currently the Spring controllers are generated with @org.springframework.stereotype.Controller and not @org.springframework.web.bind.annotation.RestController which means that manual configuration is required as explained here https://springdoc.org/#my-rest-controller-using-controller-annotation-is-ignored. Could the templates be changed to use RestController?

@welshm

Copy link
Copy Markdown
ContributorAuthor

Really happy about this change. I would however be inclined to use springdocs for viewing the API definition. As it is currently the Spring controllers are generated with @org.springframework.stereotype.Controller and not @org.springframework.web.bind.annotation.RestController which means that manual configuration is required as explained here https://springdoc.org/#my-rest-controller-using-controller-annotation-is-ignored. Could the templates be changed to use RestController?

It can be updated to do that - just for clarity though, I had added this as an option for the interfaces but had left the generated API controller implementations (apiController.mustache) unchanged - would you be expecting both to be annotated with @RestController? My opinion is probably not, as the interface has all the annotations you need.

@wing328wing328 added this to the 5.3.1 milestone Dec 18, 2021
@BlackSunshine-manage

Copy link
Copy Markdown

Hello! how i can use this plugin?? this is a big work and i waited to long time this. You're really cool!

@Jey2k

Copy link
Copy Markdown

Hi,
Quite a noob in this part, but I'm currently trying to migrate one of our application and I would like to use this generator. So first thanks for your work.
The last problem detected is with "oas3" activated, and a default value on a query param it gives some code not compatible with Swagger v3 annotations:
eg:
,@Parameter(name = "size", description = "Size of the results page (maximum size is 1'000)", defaultValue = "1000") @RequestParam(value = "size", required = false, defaultValue = "1000") Integer size

I suppose it should be included into @Schema, isn't it ?
eg:
,@Parameter(name = "size", description = "Size of the results page (maximum size is 1'000)", schema = @Schema( defaultValue = "1000" )) @RequestParam(value = "size", required = false, defaultValue = "1000") Integer size

@marinus-suniram

Copy link
Copy Markdown
Contributor

I have the same problem with the default value

@welshm

Copy link
Copy Markdown
ContributorAuthor

Please see this change #11181 from @cachescrubber which is addressing the issues of default params and Schema (along with other issues)

@kdebski85

Copy link
Copy Markdown

I also have the issue with defaultValue for Parameter. I created #11203

@mhinders

Copy link
Copy Markdown

Really happy about this change. I would however be inclined to use springdocs for viewing the API definition. As it is currently the Spring controllers are generated with @org.springframework.stereotype.Controller and not @org.springframework.web.bind.annotation.RestController which means that manual configuration is required as explained here https://springdoc.org/#my-rest-controller-using-controller-annotation-is-ignored. Could the templates be changed to use RestController?

It can be updated to do that - just for clarity though, I had added this as an option for the interfaces but had left the generated API controller implementations (apiController.mustache) unchanged - would you be expecting both to be annotated with @RestController? My opinion is probably not, as the interface has all the annotations you need.

I missed that the annotation is present on the interface. That is sufficient for me.

@shivaprasadgurram

Copy link
Copy Markdown

springdoc-openapi-ui not compatible with openapi-generator-maven-plugin. I have a dependency of spring-openapi-ui with version 1.6.9. I can see generated classes are using V3 annotations but when I try to load swagger-ui.html it is not working. Not sure what is going wrong. Can any one help me?

Need: I should be able to open swagger-ui page from browser.

@Moonergfp

Copy link
Copy Markdown

springdoc-openapi-ui not compatible with openapi-generator-maven-plugin. I have a dependency of spring-openapi-ui with version 1.6.9. I can see generated classes are using V3 annotations but when I try to load swagger-ui.html it is not working. Not sure what is going wrong. Can any one help me?

Need: I should be able to open swagger-ui page from browser.

what would be shown when you open swagger-ui page?

Sign up for freeto 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.

[REQ][Java][Spring] Allow Spring generated code to use new OAS 3 annotations

14 participants

@welshm@4brunu@wing328@MichaelKunze@atkawa7@InfoSec812@mhinders@BlackSunshine-manage@Jey2k@marinus-suniram@kdebski85@shivaprasadgurram@Moonergfp@ritual-nik
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Allow Spring generated code to use new OAS 3 annotations - #9775

Merged
wing328 merged 33 commits into
OpenAPITools:masterfrom
welshm:allow_oas3_annotations
Nov 2, 2021
Merged

Allow Spring generated code to use new OAS 3 annotations#9775
wing328 merged 33 commits into
OpenAPITools:masterfrom
welshm:allow_oas3_annotations

Conversation

@welshm

@welshmwelshm commented Jun 15, 2021

Copy link
Copy Markdown
Contributor
  • Add in oas3 option for Spring codegen to use newer annotations

  • Add useSpringController option for Spring codegen

  • Use useSpringfox to fix some unwanted imports for Spring codegen

  • Use jdk8 to add OffsetDateTime import for models in Spring codegen

  • Add JsonValue to enumOuterClass.mustache to allow enums to be
    generated properly

  • To test, use oas3: trueuseSpringController: true and useSpringfox: false in a config file to generate a Spring target.

To close#9774

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/utils/export_docs_generators.sh
    
  • File the PR against the correct branch: master, 5.1.x, 6.0.x
  • If your PR is targeting a particular programming language, @mention the technical committee members, so they are more likely to review the pull request.

welshmand others added 3 commits June 15, 2021 14:23
- Add in `oas3` option for Spring codegen to use newer annotations
- Add `useSpringController` option for Spring codegen
- Use `useSpringfox` to fix some unwanted imports for Spring codegen
- Use `jdk8` to add OffsetDateTime import for models in Spring codegen
- Add `JsonValue` to `enumOuterClass.mustache` to allow enums to be
generated properly
Bring `welshm` fork up to master
@welshm

Copy link
Copy Markdown
ContributorAuthor

I think @diyfr and @nmuesch might be good reviewers for this?

if (!this.apiFirst && !this.reactive) {
additionalProperties.put("useSpringfox", true);
if (this.useSpringfox) {
if (!this.apiFirst && !this.reactive) {

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

minor, can simplify to: this.useSpringFox && !this.apiFirst && !this.reactive

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

I'll add comments - I assume that springFox cannot be used when apiFirst and reactive is enabled but we don't use those options so I wanted it to be clear that this check is separate from the useSpringFox option check

@welshm

Copy link
Copy Markdown
ContributorAuthor

@daonomic or @lwlee2608 Would you be an appropriate reviewer for this?

@welshm

Copy link
Copy Markdown
ContributorAuthor

@wing328 - wondering if you can help me find an appropriate reviewer or how I might go about getting this added?

@welshm

Copy link
Copy Markdown
ContributorAuthor

@4brunu Would you be able to help me get a review started on this? I have not had responses from anyone else so far

@4brunu

Copy link
Copy Markdown
Contributor

You need to copy the java technical committee members for review.

@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) @nmuesch (2021/01)

@welshm

Copy link
Copy Markdown
ContributorAuthor

I'm happy to join or participate in a technical committee if that might help...

@welshm

Copy link
Copy Markdown
ContributorAuthor

@4brunu do you happen to know what the expected response time is for opening a PR and receiving a review or for applying for the technical commmittee?

Part of wanting to contribute back is so that my organization doesn't diverge too much from the project here, but it's now been over a month with no response to opening the PR other than from yourself...

@wing328

Copy link
Copy Markdown
Member

Let me try to take a look tomorrow or later this week.

@welshm

Copy link
Copy Markdown
ContributorAuthor

Let me try to take a look tomorrow or later this week.

Just following up here - I will be unavailalbe Aug 3 - 6 if there is feedback on this PR.

I am very much interested in joining the technical committee for Spring and Java if you're taking applicants (I did send an email) in order to help keep the generator supported for those languages.

@welshm

Copy link
Copy Markdown
ContributorAuthor

@wing328 any chance to get this reviewed?

@welshm

Copy link
Copy Markdown
ContributorAuthor

@wing328 Updated with latest master and regenerated tests/samples

@MichaelKunze

Copy link
Copy Markdown

Would be cool if this PR gets considered! Need this too.

@welshm

Copy link
Copy Markdown
ContributorAuthor

@wing328@4brunu is there anything more I can do to get this reviewed or looked at by someone on the team that can approve this?

This PR has been open for 2+ months, and I've kept it current with the main branch several times, but if no one will review it then there is no value in me maintaining this branch/PR.

I am more than happy to get more involved in the project, but my emails asking to join the team have also gone unanswered.

@InfoSec812

Copy link
Copy Markdown
Contributor

Functionally, I think this is quite good. I would like to see future improvements to readability as time permits. I think it would be nice to break out the OAS3/Swagger annotations into separate sub-templates which get included conditionally so that there isn't quite so much noise.

I'd be more than happy to tackle that - do you have an example or time for a quick discussion on what you imagine the file structure would look like (e.g. a separate file for Swagger2 vs. OAS3 each for boot/mvc/cloud? I could see a lot of repetition occurring there as some options (Java8, async, etc.) apply to both.

Definitely learned a lot with this PR and will definitely look to be more thorough in testing further PRs. Some of the mustache's are not features I am currently using so getting familiar with it all.

@welshmHERE is an example where the generatedAnnotation is coming from an included template. I don't think it's necessary for this PR, but it would be nice later to make things more readable/maintainable.

@welshm

Copy link
Copy Markdown
ContributorAuthor

Functionally, I think this is quite good. I would like to see future improvements to readability as time permits. I think it would be nice to break out the OAS3/Swagger annotations into separate sub-templates which get included conditionally so that there isn't quite so much noise.

I'd be more than happy to tackle that - do you have an example or time for a quick discussion on what you imagine the file structure would look like (e.g. a separate file for Swagger2 vs. OAS3 each for boot/mvc/cloud? I could see a lot of repetition occurring there as some options (Java8, async, etc.) apply to both.
Definitely learned a lot with this PR and will definitely look to be more thorough in testing further PRs. Some of the mustache's are not features I am currently using so getting familiar with it all.

@welshmHERE is an example where the generatedAnnotation is coming from an included template. I don't think it's necessary for this PR, but it would be nice later to make things more readable/maintainable.

I'd love to keep making improvements for Spring support (Java and eventually Kotlin) so I'll look to make some of those changes in a future PR

@wing328

Copy link
Copy Markdown
Member

Did a few more tests and the results are good so let's merge this one and file separate PRs for enhancements if needed.

@wing328
wing328 merged commit b117d29 into OpenAPITools:masterNov 2, 2021
@atkawa7

Copy link
Copy Markdown

@wing328 would you be able to do a minor release to test this out

@welshm
welshm deleted the allow_oas3_annotations branch November 3, 2021 01:22
@wing328

Copy link
Copy Markdown
Member

@atkawa7 can you please use the SNAPSHOT version (links in the readme) before v5.3.1 release (which is scheduled a month later)?

@atkawa7

Copy link
Copy Markdown

Thanks @wing328

@mhinders

Copy link
Copy Markdown

Really happy about this change. I would however be inclined to use springdocs for viewing the API definition. As it is currently the Spring controllers are generated with @org.springframework.stereotype.Controller and not @org.springframework.web.bind.annotation.RestController which means that manual configuration is required as explained here https://springdoc.org/#my-rest-controller-using-controller-annotation-is-ignored. Could the templates be changed to use RestController?

@welshm

Copy link
Copy Markdown
ContributorAuthor

Really happy about this change. I would however be inclined to use springdocs for viewing the API definition. As it is currently the Spring controllers are generated with @org.springframework.stereotype.Controller and not @org.springframework.web.bind.annotation.RestController which means that manual configuration is required as explained here https://springdoc.org/#my-rest-controller-using-controller-annotation-is-ignored. Could the templates be changed to use RestController?

It can be updated to do that - just for clarity though, I had added this as an option for the interfaces but had left the generated API controller implementations (apiController.mustache) unchanged - would you be expecting both to be annotated with @RestController? My opinion is probably not, as the interface has all the annotations you need.

@wing328wing328 added this to the 5.3.1 milestone Dec 18, 2021
@BlackSunshine-manage

Copy link
Copy Markdown

Hello! how i can use this plugin?? this is a big work and i waited to long time this. You're really cool!

@Jey2k

Copy link
Copy Markdown

Hi,
Quite a noob in this part, but I'm currently trying to migrate one of our application and I would like to use this generator. So first thanks for your work.
The last problem detected is with "oas3" activated, and a default value on a query param it gives some code not compatible with Swagger v3 annotations:
eg:
,@Parameter(name = "size", description = "Size of the results page (maximum size is 1'000)", defaultValue = "1000") @RequestParam(value = "size", required = false, defaultValue = "1000") Integer size

I suppose it should be included into @Schema, isn't it ?
eg:
,@Parameter(name = "size", description = "Size of the results page (maximum size is 1'000)", schema = @Schema( defaultValue = "1000" )) @RequestParam(value = "size", required = false, defaultValue = "1000") Integer size

@marinus-suniram

Copy link
Copy Markdown
Contributor

I have the same problem with the default value

@welshm

Copy link
Copy Markdown
ContributorAuthor

Please see this change #11181 from @cachescrubber which is addressing the issues of default params and Schema (along with other issues)

@kdebski85

Copy link
Copy Markdown

I also have the issue with defaultValue for Parameter. I created #11203

@mhinders

Copy link
Copy Markdown

Really happy about this change. I would however be inclined to use springdocs for viewing the API definition. As it is currently the Spring controllers are generated with @org.springframework.stereotype.Controller and not @org.springframework.web.bind.annotation.RestController which means that manual configuration is required as explained here https://springdoc.org/#my-rest-controller-using-controller-annotation-is-ignored. Could the templates be changed to use RestController?

It can be updated to do that - just for clarity though, I had added this as an option for the interfaces but had left the generated API controller implementations (apiController.mustache) unchanged - would you be expecting both to be annotated with @RestController? My opinion is probably not, as the interface has all the annotations you need.

I missed that the annotation is present on the interface. That is sufficient for me.

@shivaprasadgurram

Copy link
Copy Markdown

springdoc-openapi-ui not compatible with openapi-generator-maven-plugin. I have a dependency of spring-openapi-ui with version 1.6.9. I can see generated classes are using V3 annotations but when I try to load swagger-ui.html it is not working. Not sure what is going wrong. Can any one help me?

Need: I should be able to open swagger-ui page from browser.

@Moonergfp

Copy link
Copy Markdown

springdoc-openapi-ui not compatible with openapi-generator-maven-plugin. I have a dependency of spring-openapi-ui with version 1.6.9. I can see generated classes are using V3 annotations but when I try to load swagger-ui.html it is not working. Not sure what is going wrong. Can any one help me?

Need: I should be able to open swagger-ui page from browser.

what would be shown when you open swagger-ui page?

Sign up for freeto 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.

[REQ][Java][Spring] Allow Spring generated code to use new OAS 3 annotations

14 participants

@welshm@4brunu@wing328@MichaelKunze@atkawa7@InfoSec812@mhinders@BlackSunshine-manage@Jey2k@marinus-suniram@kdebski85@shivaprasadgurram@Moonergfp@ritual-nik
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Allow Spring generated code to use new OAS 3 annotations - #9775

Merged
wing328 merged 33 commits into
OpenAPITools:masterfrom
welshm:allow_oas3_annotations
Nov 2, 2021
Merged

Allow Spring generated code to use new OAS 3 annotations#9775
wing328 merged 33 commits into
OpenAPITools:masterfrom
welshm:allow_oas3_annotations

Conversation

@welshm

@welshmwelshm commented Jun 15, 2021

Copy link
Copy Markdown
Contributor
  • Add in oas3 option for Spring codegen to use newer annotations

  • Add useSpringController option for Spring codegen

  • Use useSpringfox to fix some unwanted imports for Spring codegen

  • Use jdk8 to add OffsetDateTime import for models in Spring codegen

  • Add JsonValue to enumOuterClass.mustache to allow enums to be
    generated properly

  • To test, use oas3: trueuseSpringController: true and useSpringfox: false in a config file to generate a Spring target.

To close#9774

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/utils/export_docs_generators.sh
    
  • File the PR against the correct branch: master, 5.1.x, 6.0.x
  • If your PR is targeting a particular programming language, @mention the technical committee members, so they are more likely to review the pull request.

welshmand others added 3 commits June 15, 2021 14:23
- Add in `oas3` option for Spring codegen to use newer annotations
- Add `useSpringController` option for Spring codegen
- Use `useSpringfox` to fix some unwanted imports for Spring codegen
- Use `jdk8` to add OffsetDateTime import for models in Spring codegen
- Add `JsonValue` to `enumOuterClass.mustache` to allow enums to be
generated properly
Bring `welshm` fork up to master
@welshm

Copy link
Copy Markdown
ContributorAuthor

I think @diyfr and @nmuesch might be good reviewers for this?

if (!this.apiFirst && !this.reactive) {
additionalProperties.put("useSpringfox", true);
if (this.useSpringfox) {
if (!this.apiFirst && !this.reactive) {

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

minor, can simplify to: this.useSpringFox && !this.apiFirst && !this.reactive

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

I'll add comments - I assume that springFox cannot be used when apiFirst and reactive is enabled but we don't use those options so I wanted it to be clear that this check is separate from the useSpringFox option check

@welshm

Copy link
Copy Markdown
ContributorAuthor

@daonomic or @lwlee2608 Would you be an appropriate reviewer for this?

@welshm

Copy link
Copy Markdown
ContributorAuthor

@wing328 - wondering if you can help me find an appropriate reviewer or how I might go about getting this added?

@welshm

Copy link
Copy Markdown
ContributorAuthor

@4brunu Would you be able to help me get a review started on this? I have not had responses from anyone else so far

@4brunu

Copy link
Copy Markdown
Contributor

You need to copy the java technical committee members for review.

@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) @nmuesch (2021/01)

@welshm

Copy link
Copy Markdown
ContributorAuthor

I'm happy to join or participate in a technical committee if that might help...

@welshm

Copy link
Copy Markdown
ContributorAuthor

@4brunu do you happen to know what the expected response time is for opening a PR and receiving a review or for applying for the technical commmittee?

Part of wanting to contribute back is so that my organization doesn't diverge too much from the project here, but it's now been over a month with no response to opening the PR other than from yourself...

@wing328

Copy link
Copy Markdown
Member

Let me try to take a look tomorrow or later this week.

@welshm

Copy link
Copy Markdown
ContributorAuthor

Let me try to take a look tomorrow or later this week.

Just following up here - I will be unavailalbe Aug 3 - 6 if there is feedback on this PR.

I am very much interested in joining the technical committee for Spring and Java if you're taking applicants (I did send an email) in order to help keep the generator supported for those languages.

@welshm

Copy link
Copy Markdown
ContributorAuthor

@wing328 any chance to get this reviewed?

@welshm

Copy link
Copy Markdown
ContributorAuthor

@wing328 Updated with latest master and regenerated tests/samples

@MichaelKunze

Copy link
Copy Markdown

Would be cool if this PR gets considered! Need this too.

@welshm

Copy link
Copy Markdown
ContributorAuthor

@wing328@4brunu is there anything more I can do to get this reviewed or looked at by someone on the team that can approve this?

This PR has been open for 2+ months, and I've kept it current with the main branch several times, but if no one will review it then there is no value in me maintaining this branch/PR.

I am more than happy to get more involved in the project, but my emails asking to join the team have also gone unanswered.

@InfoSec812

Copy link
Copy Markdown
Contributor

Functionally, I think this is quite good. I would like to see future improvements to readability as time permits. I think it would be nice to break out the OAS3/Swagger annotations into separate sub-templates which get included conditionally so that there isn't quite so much noise.

I'd be more than happy to tackle that - do you have an example or time for a quick discussion on what you imagine the file structure would look like (e.g. a separate file for Swagger2 vs. OAS3 each for boot/mvc/cloud? I could see a lot of repetition occurring there as some options (Java8, async, etc.) apply to both.

Definitely learned a lot with this PR and will definitely look to be more thorough in testing further PRs. Some of the mustache's are not features I am currently using so getting familiar with it all.

@welshmHERE is an example where the generatedAnnotation is coming from an included template. I don't think it's necessary for this PR, but it would be nice later to make things more readable/maintainable.

@welshm

Copy link
Copy Markdown
ContributorAuthor

Functionally, I think this is quite good. I would like to see future improvements to readability as time permits. I think it would be nice to break out the OAS3/Swagger annotations into separate sub-templates which get included conditionally so that there isn't quite so much noise.

I'd be more than happy to tackle that - do you have an example or time for a quick discussion on what you imagine the file structure would look like (e.g. a separate file for Swagger2 vs. OAS3 each for boot/mvc/cloud? I could see a lot of repetition occurring there as some options (Java8, async, etc.) apply to both.
Definitely learned a lot with this PR and will definitely look to be more thorough in testing further PRs. Some of the mustache's are not features I am currently using so getting familiar with it all.

@welshmHERE is an example where the generatedAnnotation is coming from an included template. I don't think it's necessary for this PR, but it would be nice later to make things more readable/maintainable.

I'd love to keep making improvements for Spring support (Java and eventually Kotlin) so I'll look to make some of those changes in a future PR

@wing328

Copy link
Copy Markdown
Member

Did a few more tests and the results are good so let's merge this one and file separate PRs for enhancements if needed.

@wing328
wing328 merged commit b117d29 into OpenAPITools:masterNov 2, 2021
@atkawa7

Copy link
Copy Markdown

@wing328 would you be able to do a minor release to test this out

@welshm
welshm deleted the allow_oas3_annotations branch November 3, 2021 01:22
@wing328

Copy link
Copy Markdown
Member

@atkawa7 can you please use the SNAPSHOT version (links in the readme) before v5.3.1 release (which is scheduled a month later)?

@atkawa7

Copy link
Copy Markdown

Thanks @wing328

@mhinders

Copy link
Copy Markdown

Really happy about this change. I would however be inclined to use springdocs for viewing the API definition. As it is currently the Spring controllers are generated with @org.springframework.stereotype.Controller and not @org.springframework.web.bind.annotation.RestController which means that manual configuration is required as explained here https://springdoc.org/#my-rest-controller-using-controller-annotation-is-ignored. Could the templates be changed to use RestController?

@welshm

Copy link
Copy Markdown
ContributorAuthor

Really happy about this change. I would however be inclined to use springdocs for viewing the API definition. As it is currently the Spring controllers are generated with @org.springframework.stereotype.Controller and not @org.springframework.web.bind.annotation.RestController which means that manual configuration is required as explained here https://springdoc.org/#my-rest-controller-using-controller-annotation-is-ignored. Could the templates be changed to use RestController?

It can be updated to do that - just for clarity though, I had added this as an option for the interfaces but had left the generated API controller implementations (apiController.mustache) unchanged - would you be expecting both to be annotated with @RestController? My opinion is probably not, as the interface has all the annotations you need.

@wing328wing328 added this to the 5.3.1 milestone Dec 18, 2021
@BlackSunshine-manage

Copy link
Copy Markdown

Hello! how i can use this plugin?? this is a big work and i waited to long time this. You're really cool!

@Jey2k

Copy link
Copy Markdown

Hi,
Quite a noob in this part, but I'm currently trying to migrate one of our application and I would like to use this generator. So first thanks for your work.
The last problem detected is with "oas3" activated, and a default value on a query param it gives some code not compatible with Swagger v3 annotations:
eg:
,@Parameter(name = "size", description = "Size of the results page (maximum size is 1'000)", defaultValue = "1000") @RequestParam(value = "size", required = false, defaultValue = "1000") Integer size

I suppose it should be included into @Schema, isn't it ?
eg:
,@Parameter(name = "size", description = "Size of the results page (maximum size is 1'000)", schema = @Schema( defaultValue = "1000" )) @RequestParam(value = "size", required = false, defaultValue = "1000") Integer size

@marinus-suniram

Copy link
Copy Markdown
Contributor

I have the same problem with the default value

@welshm

Copy link
Copy Markdown
ContributorAuthor

Please see this change #11181 from @cachescrubber which is addressing the issues of default params and Schema (along with other issues)

@kdebski85

Copy link
Copy Markdown

I also have the issue with defaultValue for Parameter. I created #11203

@mhinders

Copy link
Copy Markdown

Really happy about this change. I would however be inclined to use springdocs for viewing the API definition. As it is currently the Spring controllers are generated with @org.springframework.stereotype.Controller and not @org.springframework.web.bind.annotation.RestController which means that manual configuration is required as explained here https://springdoc.org/#my-rest-controller-using-controller-annotation-is-ignored. Could the templates be changed to use RestController?

It can be updated to do that - just for clarity though, I had added this as an option for the interfaces but had left the generated API controller implementations (apiController.mustache) unchanged - would you be expecting both to be annotated with @RestController? My opinion is probably not, as the interface has all the annotations you need.

I missed that the annotation is present on the interface. That is sufficient for me.

@shivaprasadgurram

Copy link
Copy Markdown

springdoc-openapi-ui not compatible with openapi-generator-maven-plugin. I have a dependency of spring-openapi-ui with version 1.6.9. I can see generated classes are using V3 annotations but when I try to load swagger-ui.html it is not working. Not sure what is going wrong. Can any one help me?

Need: I should be able to open swagger-ui page from browser.

@Moonergfp

Copy link
Copy Markdown

springdoc-openapi-ui not compatible with openapi-generator-maven-plugin. I have a dependency of spring-openapi-ui with version 1.6.9. I can see generated classes are using V3 annotations but when I try to load swagger-ui.html it is not working. Not sure what is going wrong. Can any one help me?

Need: I should be able to open swagger-ui page from browser.

what would be shown when you open swagger-ui page?

Sign up for freeto 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.

[REQ][Java][Spring] Allow Spring generated code to use new OAS 3 annotations

14 participants

@welshm@4brunu@wing328@MichaelKunze@atkawa7@InfoSec812@mhinders@BlackSunshine-manage@Jey2k@marinus-suniram@kdebski85@shivaprasadgurram@Moonergfp@ritual-nik