openapi-generator icon indicating copy to clipboard operation
openapi-generator copied to clipboard

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

Open ibaranga opened this issue 1 year ago • 1 comments

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: https://github.com/OpenAPITools/openapi-generator/pull/19710

ibaranga avatar Sep 29 '24 15:09 ibaranga

Hi, I'm also having the bug with the missing import of Parameter and missing "forClient". What is the current status of this issue?

doggy-dev avatar Dec 09 '25 14:12 doggy-dev