Skip to content

Commit f954947

Browse files
[kotlin-client][jvm-spring-webclient] Fix metrics URI templating for WebClient (#21148)
Spring configures uriTemplate attribute and not generated code
1 parent e3db6a6 commit f954947

File tree

4 files changed

+8
-20
lines changed
  • modules/openapi-generator/src/main/resources/kotlin-client/libraries/jvm-spring-webclient/infrastructure
  • samples/client
    • echo_api/kotlin-jvm-spring-3-webclient/src/main/kotlin/org/openapitools/client/infrastructure
    • petstore
      • kotlin-jvm-spring-2-webclient/src/main/kotlin/org/openapitools/client/infrastructure
      • kotlin-jvm-spring-3-webclient/src/main/kotlin/org/openapitools/client/infrastructure

4 files changed

+8
-20
lines changed

modules/openapi-generator/src/main/resources/kotlin-client/libraries/jvm-spring-webclient/infrastructure/ApiClient.kt.mustache

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,6 @@ import org.springframework.http.client.MultipartBodyBuilder
1010
import org.springframework.util.LinkedMultiValueMap
1111
import reactor.core.publisher.Mono
1212

13-
private val URI_TEMPLATE_ATTRIBUTE = WebClient::class.java.name + ".uriTemplate";
14-
1513
{{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}open class ApiClient(protected val client: WebClient) {
1614
1715
protected inline fun <reified I : Any, reified T: Any?> request(requestConfig: RequestConfig<I>): Mono<ResponseEntity<T>> {
@@ -40,10 +38,8 @@ private val URI_TEMPLATE_ATTRIBUTE = WebClient::class.java.name + ".uriTemplate"
4038
method(HttpMethod.valueOf(requestConfig.method.name))
4139

4240
private fun <I> WebClient.RequestBodyUriSpec.uri(requestConfig: RequestConfig<I>) =
43-
uri { builder ->
44-
attribute(URI_TEMPLATE_ATTRIBUTE, requestConfig.path)
41+
uri(requestConfig.path) { builder ->
4542
builder
46-
.path(requestConfig.path)
4743
.queryParams(LinkedMultiValueMap(requestConfig.query))
4844
.build(requestConfig.params)
4945
}
@@ -55,6 +51,7 @@ private val URI_TEMPLATE_ATTRIBUTE = WebClient::class.java.name + ".uriTemplate"
5551
when {
5652
requestConfig.headers[HttpHeaders.CONTENT_TYPE] == MediaType.MULTIPART_FORM_DATA_VALUE -> {
5753
val builder = MultipartBodyBuilder()
54+
@Suppress("UNCHECKED_CAST")
5855
(requestConfig.body as Map<String, PartConfig<*>>).forEach { (name, part) ->
5956
if (part.body != null) {
6057
val partBuilder = builder.part(name, part.body)

samples/client/echo_api/kotlin-jvm-spring-3-webclient/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,6 @@ import org.springframework.http.client.MultipartBodyBuilder
1010
import org.springframework.util.LinkedMultiValueMap
1111
import reactor.core.publisher.Mono
1212

13-
private val URI_TEMPLATE_ATTRIBUTE = WebClient::class.java.name + ".uriTemplate";
14-
1513
open class ApiClient(protected val client: WebClient) {
1614

1715
protected inline fun <reified I : Any, reified T: Any?> request(requestConfig: RequestConfig<I>): Mono<ResponseEntity<T>> {
@@ -40,10 +38,8 @@ open class ApiClient(protected val client: WebClient) {
4038
method(HttpMethod.valueOf(requestConfig.method.name))
4139

4240
private fun <I> WebClient.RequestBodyUriSpec.uri(requestConfig: RequestConfig<I>) =
43-
uri { builder ->
44-
attribute(URI_TEMPLATE_ATTRIBUTE, requestConfig.path)
41+
uri(requestConfig.path) { builder ->
4542
builder
46-
.path(requestConfig.path)
4743
.queryParams(LinkedMultiValueMap(requestConfig.query))
4844
.build(requestConfig.params)
4945
}
@@ -55,6 +51,7 @@ open class ApiClient(protected val client: WebClient) {
5551
when {
5652
requestConfig.headers[HttpHeaders.CONTENT_TYPE] == MediaType.MULTIPART_FORM_DATA_VALUE -> {
5753
val builder = MultipartBodyBuilder()
54+
@Suppress("UNCHECKED_CAST")
5855
(requestConfig.body as Map<String, PartConfig<*>>).forEach { (name, part) ->
5956
if (part.body != null) {
6057
val partBuilder = builder.part(name, part.body)

samples/client/petstore/kotlin-jvm-spring-2-webclient/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,6 @@ import org.springframework.http.client.MultipartBodyBuilder
1010
import org.springframework.util.LinkedMultiValueMap
1111
import reactor.core.publisher.Mono
1212

13-
private val URI_TEMPLATE_ATTRIBUTE = WebClient::class.java.name + ".uriTemplate";
14-
1513
open class ApiClient(protected val client: WebClient) {
1614

1715
protected inline fun <reified I : Any, reified T: Any?> request(requestConfig: RequestConfig<I>): Mono<ResponseEntity<T>> {
@@ -40,10 +38,8 @@ open class ApiClient(protected val client: WebClient) {
4038
method(HttpMethod.valueOf(requestConfig.method.name))
4139

4240
private fun <I> WebClient.RequestBodyUriSpec.uri(requestConfig: RequestConfig<I>) =
43-
uri { builder ->
44-
attribute(URI_TEMPLATE_ATTRIBUTE, requestConfig.path)
41+
uri(requestConfig.path) { builder ->
4542
builder
46-
.path(requestConfig.path)
4743
.queryParams(LinkedMultiValueMap(requestConfig.query))
4844
.build(requestConfig.params)
4945
}
@@ -55,6 +51,7 @@ open class ApiClient(protected val client: WebClient) {
5551
when {
5652
requestConfig.headers[HttpHeaders.CONTENT_TYPE] == MediaType.MULTIPART_FORM_DATA_VALUE -> {
5753
val builder = MultipartBodyBuilder()
54+
@Suppress("UNCHECKED_CAST")
5855
(requestConfig.body as Map<String, PartConfig<*>>).forEach { (name, part) ->
5956
if (part.body != null) {
6057
val partBuilder = builder.part(name, part.body)

samples/client/petstore/kotlin-jvm-spring-3-webclient/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,6 @@ import org.springframework.http.client.MultipartBodyBuilder
1010
import org.springframework.util.LinkedMultiValueMap
1111
import reactor.core.publisher.Mono
1212

13-
private val URI_TEMPLATE_ATTRIBUTE = WebClient::class.java.name + ".uriTemplate";
14-
1513
open class ApiClient(protected val client: WebClient) {
1614

1715
protected inline fun <reified I : Any, reified T: Any?> request(requestConfig: RequestConfig<I>): Mono<ResponseEntity<T>> {
@@ -40,10 +38,8 @@ open class ApiClient(protected val client: WebClient) {
4038
method(HttpMethod.valueOf(requestConfig.method.name))
4139

4240
private fun <I> WebClient.RequestBodyUriSpec.uri(requestConfig: RequestConfig<I>) =
43-
uri { builder ->
44-
attribute(URI_TEMPLATE_ATTRIBUTE, requestConfig.path)
41+
uri(requestConfig.path) { builder ->
4542
builder
46-
.path(requestConfig.path)
4743
.queryParams(LinkedMultiValueMap(requestConfig.query))
4844
.build(requestConfig.params)
4945
}
@@ -55,6 +51,7 @@ open class ApiClient(protected val client: WebClient) {
5551
when {
5652
requestConfig.headers[HttpHeaders.CONTENT_TYPE] == MediaType.MULTIPART_FORM_DATA_VALUE -> {
5753
val builder = MultipartBodyBuilder()
54+
@Suppress("UNCHECKED_CAST")
5855
(requestConfig.body as Map<String, PartConfig<*>>).forEach { (name, part) ->
5956
if (part.body != null) {
6057
val partBuilder = builder.part(name, part.body)

0 commit comments

Comments
 (0)