Skip to content
New issue

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

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

Already on GitHub? Sign in to your account

[REQ] spring-http-interface: support multiple Spring http client implementations, fix unnecessary Parameter request body annotation #19712

Open
ibaranga opened this issue Sep 29, 2024 · 0 comments

Comments

@ibaranga
Copy link

ibaranga commented Sep 29, 2024

Is your feature request related to a problem? Please describe.

When generating models, http clients interfaces and implementations with library: spring-http-interface, I've noticed 2 limitations:

  1. the generated HttpInterfacesAbstractConfigurator only works with spring reactive WebClient implementation, which might not be flexible enough for users who want to generate non-reactive Spring Boot applications.
  2. the generated models seem to inherit the Parameter annotation from JavaSpring/paramDoc.mustache which leads to compile errors, since the io.swagger.v3.oas.annotations.Parameter is not imported in the generated API clients

Describe the solution you'd like

  • Introduce the springHttpClientAdapter additional option for the spring-http-interface library
    • This property is used for selecting HTTP client implementation in Spring HTTP interfaces, with separate templates for each client configuration
  • Added an spring-http-interface-specific empty paramDoc.mustache so that the generated client classes methods are no longer annotated with theio.swagger.v3.oas.annotations.Parameter

Describe alternatives you've considered

Tried generating with documentationProvider : 'none' additional property, but that seems to be the default anyway when using library: spring-http-interface and still getting that Parameter annotation on request body methods' parameters

Another possible approach to address the flexibility-factor with regards to specific Spring client implementation would be to inject a HttpServiceProxyFactory instance in the generated HttpInterfacesAbstractConfigurator, rather than a WebClient, RestClient, or RestTemplate, as specified by the proposed springHttpClientAdapter additional property.

E.g. the generated HttpInterfacesAbstractConfigurator would look like this:

public abstract class HttpInterfacesAbstractConfigurator {

    private final HttpServiceProxyFactory httpServiceProxyFactory;

    public HttpInterfacesAbstractConfigurator(final HttpServiceProxyFactory httpServiceProxyFactory) {
        this.httpServiceProxyFactory = httpServiceProxyFactory;
    }

    @Bean(name = "org.openapitools.configuration.HttpInterfacesAbstractConfigurator.sample")
    SampleApi sampleHttpProxy() {
        return httpServiceProxyFactory.createClient(SampleApi.class);
    }
}

Additional context

Solution proposal: #19710

@ibaranga ibaranga changed the title [REQ] spring-http-interface: support multiple Spring http client implementations [REQ] spring-http-interface: fix unnecessary Parameter request body annotation, support multiple Spring http client implementations Sep 29, 2024
@ibaranga ibaranga changed the title [REQ] spring-http-interface: fix unnecessary Parameter request body annotation, support multiple Spring http client implementations [REQ] spring-http-interface: support multiple Spring http client implementations, fix unnecessary Parameter request body annotation Sep 29, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant