-
-
Notifications
You must be signed in to change notification settings - Fork 7.3k
Description
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:
- the generated
HttpInterfacesAbstractConfiguratoronly works with spring reactiveWebClientimplementation, which might not be flexible enough for users who want to generate non-reactive Spring Boot applications. - the generated models seem to inherit the
Parameterannotation fromJavaSpring/paramDoc.mustachewhich leads to compile errors, since theio.swagger.v3.oas.annotations.Parameteris not imported in the generated API clients
Describe the solution you'd like
- Introduce the
springHttpClientAdapteradditional option for thespring-http-interfacelibrary- 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 emptyparamDoc.mustacheso 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