Skip to content

Commit f2bbb9e

Browse files
authored
[java] generateClientAsBean for restclient and webclient (#20754)
* [java] generateClientAsBean for restclient and webclient Added possibility to generate restclient and webclient as a @component in the same fashion as resttemplate. Fix #17885 Fix #19229 * - Samples
1 parent efc53f5 commit f2bbb9e

File tree

72 files changed

+352
-316
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

72 files changed

+352
-316
lines changed

docs/generators/java-microprofile.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl
5252
|errorObjectType|Error Object type. (This option is for okhttp-gson only)| |null|
5353
|failOnUnknownProperties|Fail Jackson de-serialization on unknown properties| |false|
5454
|generateBuilders|Whether to generate builders for models| |false|
55-
|generateClientAsBean|For resttemplate, configure whether to create `ApiClient.java` and Apis clients as bean (with `@Component` annotation).| |false|
55+
|generateClientAsBean|For resttemplate, restclient and webclient, configure whether to create `ApiClient.java` and Apis clients as bean (with `@Component` annotation).| |false|
5656
|generateConstructorWithAllArgs|whether to generate a constructor for all arguments| |false|
5757
|gradleProperties|Append additional Gradle properties to the gradle.properties file| |null|
5858
|groupId|groupId in generated pom.xml| |org.openapitools|

docs/generators/java.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl
5252
|errorObjectType|Error Object type. (This option is for okhttp-gson only)| |null|
5353
|failOnUnknownProperties|Fail Jackson de-serialization on unknown properties| |false|
5454
|generateBuilders|Whether to generate builders for models| |false|
55-
|generateClientAsBean|For resttemplate, configure whether to create `ApiClient.java` and Apis clients as bean (with `@Component` annotation).| |false|
55+
|generateClientAsBean|For resttemplate, restclient and webclient, configure whether to create `ApiClient.java` and Apis clients as bean (with `@Component` annotation).| |false|
5656
|generateConstructorWithAllArgs|whether to generate a constructor for all arguments| |false|
5757
|gradleProperties|Append additional Gradle properties to the gradle.properties file| |null|
5858
|groupId|groupId in generated pom.xml| |org.openapitools|

modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/JavaClientCodegen.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -238,7 +238,7 @@ public JavaClientCodegen() {
238238
cliOptions.add(CliOption.newString(MICROPROFILE_REST_CLIENT_VERSION, "Version of MicroProfile Rest Client API."));
239239
cliOptions.add(CliOption.newString(CodegenConstants.USE_SINGLE_REQUEST_PARAMETER, "Setting this property to \"true\" will generate functions with a single argument containing all API endpoint parameters instead of one argument per parameter. ONLY jersey2, jersey3, okhttp-gson, microprofile, Spring RestClient, Spring WebClient support this option. Setting this property to \"static\" does the same as \"true\", but also makes the generated arguments class static with single parameter instantiation.").defaultValue("false"));
240240
cliOptions.add(CliOption.newBoolean(WEBCLIENT_BLOCKING_OPERATIONS, "Making all WebClient operations blocking(sync). Note that if on operation 'x-webclient-blocking: false' then such operation won't be sync", this.webclientBlockingOperations));
241-
cliOptions.add(CliOption.newBoolean(GENERATE_CLIENT_AS_BEAN, "For resttemplate, configure whether to create `ApiClient.java` and Apis clients as bean (with `@Component` annotation).", this.generateClientAsBean));
241+
cliOptions.add(CliOption.newBoolean(GENERATE_CLIENT_AS_BEAN, "For resttemplate, restclient and webclient, configure whether to create `ApiClient.java` and Apis clients as bean (with `@Component` annotation).", this.generateClientAsBean));
242242
cliOptions.add(CliOption.newBoolean(SUPPORT_URL_QUERY, "Generate toUrlQueryString in POJO (default to true). Available on `native`, `apache-httpclient` libraries."));
243243
cliOptions.add(CliOption.newBoolean(USE_ENUM_CASE_INSENSITIVE, "Use `equalsIgnoreCase` when String for enum comparison", useEnumCaseInsensitive));
244244
cliOptions.add(CliOption.newBoolean(FAIL_ON_UNKNOWN_PROPERTIES, "Fail Jackson de-serialization on unknown properties", this.failOnUnknownProperties));

modules/openapi-generator/src/main/resources/Java/libraries/restclient/ApiClient.mustache

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,9 @@ import java.util.function.Consumer;
1313
{{#openApiNullable}}
1414
import org.openapitools.jackson.nullable.JsonNullableModule;
1515
{{/openApiNullable}}
16+
{{#generateClientAsBean}}
17+
import org.springframework.beans.factory.annotation.Autowired;
18+
{{/generateClientAsBean}}
1619
import org.springframework.core.ParameterizedTypeReference;
1720
import org.springframework.http.HttpHeaders;
1821
import org.springframework.http.HttpMethod;
@@ -23,6 +26,9 @@ import org.springframework.http.converter.json.MappingJackson2HttpMessageConvert
2326
{{#withXml}}
2427
import org.springframework.http.converter.xml.MappingJackson2XmlHttpMessageConverter;
2528
{{/withXml}}
29+
{{#generateClientAsBean}}
30+
import org.springframework.stereotype.Component;
31+
{{/generateClientAsBean}}
2632
import org.springframework.util.CollectionUtils;
2733
import org.springframework.util.LinkedMultiValueMap;
2834
import org.springframework.util.MultiValueMap;
@@ -61,6 +67,9 @@ import {{invokerPackage}}.auth.OAuth;
6167
{{/hasOAuthMethods}}
6268

6369
{{>generatedAnnotation}}
70+
{{#generateClientAsBean}}
71+
@Component("{{invokerPackage}}.ApiClient")
72+
{{/generateClientAsBean}}
6473
public class ApiClient{{#jsr310}} extends JavaTimeFormatter{{/jsr310}} {
6574
public enum CollectionFormat {
6675
CSV(","), TSV("\t"), SSV(" "), PIPES("|"), MULTI(null);
@@ -91,6 +100,9 @@ public class ApiClient{{#jsr310}} extends JavaTimeFormatter{{/jsr310}} {
91100
this(null);
92101
}
93102

103+
{{#generateClientAsBean}}
104+
@Autowired
105+
{{/generateClientAsBean}}
94106
public ApiClient(RestClient restClient) {
95107
this(restClient, createDefaultDateFormat());
96108
}

modules/openapi-generator/src/main/resources/Java/libraries/restclient/api.mustache

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,19 +17,25 @@ import {{javaxPackage}}.validation.Valid;
1717

1818
{{/useBeanValidation}}
1919
import org.springframework.beans.factory.annotation.Autowired;
20-
import org.springframework.util.LinkedMultiValueMap;
21-
import org.springframework.util.MultiValueMap;
22-
import org.springframework.core.ParameterizedTypeReference;
23-
import org.springframework.web.client.RestClient.ResponseSpec;
24-
import org.springframework.web.client.RestClientResponseException;
2520
import org.springframework.core.io.FileSystemResource;
21+
import org.springframework.core.ParameterizedTypeReference;
2622
import org.springframework.http.HttpHeaders;
2723
import org.springframework.http.HttpMethod;
2824
import org.springframework.http.HttpStatus;
2925
import org.springframework.http.MediaType;
3026
import org.springframework.http.ResponseEntity;
27+
{{#generateClientAsBean}}
28+
import org.springframework.stereotype.Component;
29+
{{/generateClientAsBean}}
30+
import org.springframework.util.LinkedMultiValueMap;
31+
import org.springframework.util.MultiValueMap;
32+
import org.springframework.web.client.RestClient.ResponseSpec;
33+
import org.springframework.web.client.RestClientResponseException;
3134

3235
{{>generatedAnnotation}}
36+
{{#generateClientAsBean}}
37+
@Component("{{package}}.{{classname}}")
38+
{{/generateClientAsBean}}
3339
{{#operations}}
3440
public class {{classname}} {
3541
private ApiClient apiClient;
@@ -272,4 +278,4 @@ public class {{classname}} {
272278
}
273279
{{/operation}}
274280
}
275-
{{/operations}}
281+
{{/operations}}

modules/openapi-generator/src/main/resources/Java/libraries/webclient/ApiClient.mustache

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,9 @@ import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
88
{{#openApiNullable}}
99
import org.openapitools.jackson.nullable.JsonNullableModule;
1010
{{/openApiNullable}}
11+
{{#generateClientAsBean}}
12+
import org.springframework.beans.factory.annotation.Autowired;
13+
{{/generateClientAsBean}}
1114
import org.springframework.core.ParameterizedTypeReference;
1215
import org.springframework.http.HttpHeaders;
1316
import org.springframework.http.HttpMethod;
@@ -22,13 +25,16 @@ import org.springframework.http.client.BufferingClientHttpRequestFactory;
2225
import org.springframework.http.client.ClientHttpRequestExecution;
2326
import org.springframework.http.client.ClientHttpRequestInterceptor;
2427
import org.springframework.http.client.ClientHttpResponse;
28+
import org.springframework.http.client.reactive.ClientHttpRequest;
2529
import org.springframework.http.codec.json.Jackson2JsonDecoder;
2630
import org.springframework.http.codec.json.Jackson2JsonEncoder;
31+
{{#generateClientAsBean}}
32+
import org.springframework.stereotype.Component;
33+
{{/generateClientAsBean}}
2734
import org.springframework.util.CollectionUtils;
2835
import org.springframework.util.LinkedMultiValueMap;
2936
import org.springframework.util.MultiValueMap;
3037
import org.springframework.util.StringUtils;
31-
import org.springframework.http.client.reactive.ClientHttpRequest;
3238
import org.springframework.web.client.RestClientException;
3339
import org.springframework.web.util.UriComponentsBuilder;
3440
import org.springframework.web.reactive.function.client.WebClient;
@@ -76,6 +82,9 @@ import {{invokerPackage}}.auth.OAuth;
7682
{{/hasOAuthMethods}}
7783

7884
{{>generatedAnnotation}}
85+
{{#generateClientAsBean}}
86+
@Component("{{invokerPackage}}.ApiClient")
87+
{{/generateClientAsBean}}
7988
public class ApiClient{{#jsr310}} extends JavaTimeFormatter{{/jsr310}} {
8089
public enum CollectionFormat {
8190
CSV(","), TSV("\t"), SSV(" "), PIPES("|"), MULTI(null);
@@ -111,6 +120,9 @@ public class ApiClient{{#jsr310}} extends JavaTimeFormatter{{/jsr310}} {
111120
this.init();
112121
}
113122

123+
{{#generateClientAsBean}}
124+
@Autowired
125+
{{/generateClientAsBean}}
114126
public ApiClient(WebClient webClient) {
115127
this(Optional.ofNullable(webClient).orElseGet(() -> buildWebClient()), createDefaultDateFormat());
116128
}

modules/openapi-generator/src/main/resources/Java/libraries/webclient/api.mustache

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,21 +17,27 @@ import {{javaxPackage}}.validation.Valid;
1717

1818
{{/useBeanValidation}}
1919
import org.springframework.beans.factory.annotation.Autowired;
20-
import org.springframework.util.LinkedMultiValueMap;
21-
import org.springframework.util.MultiValueMap;
22-
import org.springframework.core.ParameterizedTypeReference;
23-
import org.springframework.web.reactive.function.client.WebClient.ResponseSpec;
24-
import org.springframework.web.reactive.function.client.WebClientResponseException;
2520
import org.springframework.core.io.FileSystemResource;
21+
import org.springframework.core.ParameterizedTypeReference;
2622
import org.springframework.http.HttpHeaders;
2723
import org.springframework.http.HttpMethod;
2824
import org.springframework.http.HttpStatus;
2925
import org.springframework.http.MediaType;
3026
import org.springframework.http.ResponseEntity;
27+
{{#generateClientAsBean}}
28+
import org.springframework.stereotype.Component;
29+
{{/generateClientAsBean}}
30+
import org.springframework.util.LinkedMultiValueMap;
31+
import org.springframework.util.MultiValueMap;
32+
import org.springframework.web.reactive.function.client.WebClient.ResponseSpec;
33+
import org.springframework.web.reactive.function.client.WebClientResponseException;
3134
import reactor.core.publisher.Mono;
3235
import reactor.core.publisher.Flux;
3336

3437
{{>generatedAnnotation}}
38+
{{#generateClientAsBean}}
39+
@Component("{{package}}.{{classname}}")
40+
{{/generateClientAsBean}}
3541
{{#operations}}
3642
public class {{classname}} {
3743
private ApiClient apiClient;

samples/client/echo_api/java/restclient/src/main/java/org/openapitools/client/api/AuthApi.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,17 +10,17 @@
1010
import java.util.stream.Collectors;
1111

1212
import org.springframework.beans.factory.annotation.Autowired;
13-
import org.springframework.util.LinkedMultiValueMap;
14-
import org.springframework.util.MultiValueMap;
15-
import org.springframework.core.ParameterizedTypeReference;
16-
import org.springframework.web.client.RestClient.ResponseSpec;
17-
import org.springframework.web.client.RestClientResponseException;
1813
import org.springframework.core.io.FileSystemResource;
14+
import org.springframework.core.ParameterizedTypeReference;
1915
import org.springframework.http.HttpHeaders;
2016
import org.springframework.http.HttpMethod;
2117
import org.springframework.http.HttpStatus;
2218
import org.springframework.http.MediaType;
2319
import org.springframework.http.ResponseEntity;
20+
import org.springframework.util.LinkedMultiValueMap;
21+
import org.springframework.util.MultiValueMap;
22+
import org.springframework.web.client.RestClient.ResponseSpec;
23+
import org.springframework.web.client.RestClientResponseException;
2424

2525
@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.13.0-SNAPSHOT")
2626
public class AuthApi {

samples/client/echo_api/java/restclient/src/main/java/org/openapitools/client/api/BodyApi.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,17 +14,17 @@
1414
import java.util.stream.Collectors;
1515

1616
import org.springframework.beans.factory.annotation.Autowired;
17-
import org.springframework.util.LinkedMultiValueMap;
18-
import org.springframework.util.MultiValueMap;
19-
import org.springframework.core.ParameterizedTypeReference;
20-
import org.springframework.web.client.RestClient.ResponseSpec;
21-
import org.springframework.web.client.RestClientResponseException;
2217
import org.springframework.core.io.FileSystemResource;
18+
import org.springframework.core.ParameterizedTypeReference;
2319
import org.springframework.http.HttpHeaders;
2420
import org.springframework.http.HttpMethod;
2521
import org.springframework.http.HttpStatus;
2622
import org.springframework.http.MediaType;
2723
import org.springframework.http.ResponseEntity;
24+
import org.springframework.util.LinkedMultiValueMap;
25+
import org.springframework.util.MultiValueMap;
26+
import org.springframework.web.client.RestClient.ResponseSpec;
27+
import org.springframework.web.client.RestClientResponseException;
2828

2929
@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.13.0-SNAPSHOT")
3030
public class BodyApi {

samples/client/echo_api/java/restclient/src/main/java/org/openapitools/client/api/FormApi.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,17 +11,17 @@
1111
import java.util.stream.Collectors;
1212

1313
import org.springframework.beans.factory.annotation.Autowired;
14-
import org.springframework.util.LinkedMultiValueMap;
15-
import org.springframework.util.MultiValueMap;
16-
import org.springframework.core.ParameterizedTypeReference;
17-
import org.springframework.web.client.RestClient.ResponseSpec;
18-
import org.springframework.web.client.RestClientResponseException;
1914
import org.springframework.core.io.FileSystemResource;
15+
import org.springframework.core.ParameterizedTypeReference;
2016
import org.springframework.http.HttpHeaders;
2117
import org.springframework.http.HttpMethod;
2218
import org.springframework.http.HttpStatus;
2319
import org.springframework.http.MediaType;
2420
import org.springframework.http.ResponseEntity;
21+
import org.springframework.util.LinkedMultiValueMap;
22+
import org.springframework.util.MultiValueMap;
23+
import org.springframework.web.client.RestClient.ResponseSpec;
24+
import org.springframework.web.client.RestClientResponseException;
2525

2626
@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.13.0-SNAPSHOT")
2727
public class FormApi {

0 commit comments

Comments
 (0)