From f9549479c926affe1c06b7ae71712c4a0985819b Mon Sep 17 00:00:00 2001 From: paul-kraftlauget <94446221+paul-kraftlauget@users.noreply.github.com> Date: Sat, 26 Apr 2025 16:19:39 +0200 Subject: [PATCH] [kotlin-client][jvm-spring-webclient] Fix metrics URI templating for WebClient (#21148) Spring configures uriTemplate attribute and not generated code --- .../infrastructure/ApiClient.kt.mustache | 7 ++----- .../org/openapitools/client/infrastructure/ApiClient.kt | 7 ++----- .../org/openapitools/client/infrastructure/ApiClient.kt | 7 ++----- .../org/openapitools/client/infrastructure/ApiClient.kt | 7 ++----- 4 files changed, 8 insertions(+), 20 deletions(-) diff --git a/modules/openapi-generator/src/main/resources/kotlin-client/libraries/jvm-spring-webclient/infrastructure/ApiClient.kt.mustache b/modules/openapi-generator/src/main/resources/kotlin-client/libraries/jvm-spring-webclient/infrastructure/ApiClient.kt.mustache index 10db61bdb74..76cc01c1ef2 100644 --- a/modules/openapi-generator/src/main/resources/kotlin-client/libraries/jvm-spring-webclient/infrastructure/ApiClient.kt.mustache +++ b/modules/openapi-generator/src/main/resources/kotlin-client/libraries/jvm-spring-webclient/infrastructure/ApiClient.kt.mustache @@ -10,8 +10,6 @@ import org.springframework.http.client.MultipartBodyBuilder import org.springframework.util.LinkedMultiValueMap import reactor.core.publisher.Mono -private val URI_TEMPLATE_ATTRIBUTE = WebClient::class.java.name + ".uriTemplate"; - {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}open class ApiClient(protected val client: WebClient) { protected inline fun request(requestConfig: RequestConfig): Mono> { @@ -40,10 +38,8 @@ private val URI_TEMPLATE_ATTRIBUTE = WebClient::class.java.name + ".uriTemplate" method(HttpMethod.valueOf(requestConfig.method.name)) private fun WebClient.RequestBodyUriSpec.uri(requestConfig: RequestConfig) = - uri { builder -> - attribute(URI_TEMPLATE_ATTRIBUTE, requestConfig.path) + uri(requestConfig.path) { builder -> builder - .path(requestConfig.path) .queryParams(LinkedMultiValueMap(requestConfig.query)) .build(requestConfig.params) } @@ -55,6 +51,7 @@ private val URI_TEMPLATE_ATTRIBUTE = WebClient::class.java.name + ".uriTemplate" when { requestConfig.headers[HttpHeaders.CONTENT_TYPE] == MediaType.MULTIPART_FORM_DATA_VALUE -> { val builder = MultipartBodyBuilder() + @Suppress("UNCHECKED_CAST") (requestConfig.body as Map>).forEach { (name, part) -> if (part.body != null) { val partBuilder = builder.part(name, part.body) diff --git a/samples/client/echo_api/kotlin-jvm-spring-3-webclient/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt b/samples/client/echo_api/kotlin-jvm-spring-3-webclient/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt index 224822246c0..ba18c122dba 100644 --- a/samples/client/echo_api/kotlin-jvm-spring-3-webclient/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt +++ b/samples/client/echo_api/kotlin-jvm-spring-3-webclient/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt @@ -10,8 +10,6 @@ import org.springframework.http.client.MultipartBodyBuilder import org.springframework.util.LinkedMultiValueMap import reactor.core.publisher.Mono -private val URI_TEMPLATE_ATTRIBUTE = WebClient::class.java.name + ".uriTemplate"; - open class ApiClient(protected val client: WebClient) { protected inline fun request(requestConfig: RequestConfig): Mono> { @@ -40,10 +38,8 @@ open class ApiClient(protected val client: WebClient) { method(HttpMethod.valueOf(requestConfig.method.name)) private fun WebClient.RequestBodyUriSpec.uri(requestConfig: RequestConfig) = - uri { builder -> - attribute(URI_TEMPLATE_ATTRIBUTE, requestConfig.path) + uri(requestConfig.path) { builder -> builder - .path(requestConfig.path) .queryParams(LinkedMultiValueMap(requestConfig.query)) .build(requestConfig.params) } @@ -55,6 +51,7 @@ open class ApiClient(protected val client: WebClient) { when { requestConfig.headers[HttpHeaders.CONTENT_TYPE] == MediaType.MULTIPART_FORM_DATA_VALUE -> { val builder = MultipartBodyBuilder() + @Suppress("UNCHECKED_CAST") (requestConfig.body as Map>).forEach { (name, part) -> if (part.body != null) { val partBuilder = builder.part(name, part.body) diff --git a/samples/client/petstore/kotlin-jvm-spring-2-webclient/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt b/samples/client/petstore/kotlin-jvm-spring-2-webclient/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt index 224822246c0..ba18c122dba 100644 --- a/samples/client/petstore/kotlin-jvm-spring-2-webclient/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt +++ b/samples/client/petstore/kotlin-jvm-spring-2-webclient/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt @@ -10,8 +10,6 @@ import org.springframework.http.client.MultipartBodyBuilder import org.springframework.util.LinkedMultiValueMap import reactor.core.publisher.Mono -private val URI_TEMPLATE_ATTRIBUTE = WebClient::class.java.name + ".uriTemplate"; - open class ApiClient(protected val client: WebClient) { protected inline fun request(requestConfig: RequestConfig): Mono> { @@ -40,10 +38,8 @@ open class ApiClient(protected val client: WebClient) { method(HttpMethod.valueOf(requestConfig.method.name)) private fun WebClient.RequestBodyUriSpec.uri(requestConfig: RequestConfig) = - uri { builder -> - attribute(URI_TEMPLATE_ATTRIBUTE, requestConfig.path) + uri(requestConfig.path) { builder -> builder - .path(requestConfig.path) .queryParams(LinkedMultiValueMap(requestConfig.query)) .build(requestConfig.params) } @@ -55,6 +51,7 @@ open class ApiClient(protected val client: WebClient) { when { requestConfig.headers[HttpHeaders.CONTENT_TYPE] == MediaType.MULTIPART_FORM_DATA_VALUE -> { val builder = MultipartBodyBuilder() + @Suppress("UNCHECKED_CAST") (requestConfig.body as Map>).forEach { (name, part) -> if (part.body != null) { val partBuilder = builder.part(name, part.body) diff --git a/samples/client/petstore/kotlin-jvm-spring-3-webclient/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt b/samples/client/petstore/kotlin-jvm-spring-3-webclient/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt index 224822246c0..ba18c122dba 100644 --- a/samples/client/petstore/kotlin-jvm-spring-3-webclient/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt +++ b/samples/client/petstore/kotlin-jvm-spring-3-webclient/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt @@ -10,8 +10,6 @@ import org.springframework.http.client.MultipartBodyBuilder import org.springframework.util.LinkedMultiValueMap import reactor.core.publisher.Mono -private val URI_TEMPLATE_ATTRIBUTE = WebClient::class.java.name + ".uriTemplate"; - open class ApiClient(protected val client: WebClient) { protected inline fun request(requestConfig: RequestConfig): Mono> { @@ -40,10 +38,8 @@ open class ApiClient(protected val client: WebClient) { method(HttpMethod.valueOf(requestConfig.method.name)) private fun WebClient.RequestBodyUriSpec.uri(requestConfig: RequestConfig) = - uri { builder -> - attribute(URI_TEMPLATE_ATTRIBUTE, requestConfig.path) + uri(requestConfig.path) { builder -> builder - .path(requestConfig.path) .queryParams(LinkedMultiValueMap(requestConfig.query)) .build(requestConfig.params) } @@ -55,6 +51,7 @@ open class ApiClient(protected val client: WebClient) { when { requestConfig.headers[HttpHeaders.CONTENT_TYPE] == MediaType.MULTIPART_FORM_DATA_VALUE -> { val builder = MultipartBodyBuilder() + @Suppress("UNCHECKED_CAST") (requestConfig.body as Map>).forEach { (name, part) -> if (part.body != null) { val partBuilder = builder.part(name, part.body)