From 4bfc1247fbd01330295c7dc29267a83e35098eab Mon Sep 17 00:00:00 2001 From: "hidde.wieringa" Date: Mon, 24 Nov 2025 13:33:53 +0100 Subject: [PATCH 1/2] Kotlin nullability for Spring Boot 4 compatibility For Kotlin WebClient and RestClient generated clients. The current implementation causes a generated client like ```kt open class ApiClient(protected val client: RestClient) { protected inline fun request(requestConfig: RequestConfig): ResponseEntity { return prepare(defaults(requestConfig)) .retrieve() .toEntity(object : ParameterizedTypeReference() {}) } // ... } ``` while that gives errors: --- .../infrastructure/ApiClient.kt.mustache | 4 ++-- .../jvm-spring-webclient/infrastructure/ApiClient.kt.mustache | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/modules/openapi-generator/src/main/resources/kotlin-client/libraries/jvm-spring-restclient/infrastructure/ApiClient.kt.mustache b/modules/openapi-generator/src/main/resources/kotlin-client/libraries/jvm-spring-restclient/infrastructure/ApiClient.kt.mustache index b35a15f2a74e..43f792467b6b 100644 --- a/modules/openapi-generator/src/main/resources/kotlin-client/libraries/jvm-spring-restclient/infrastructure/ApiClient.kt.mustache +++ b/modules/openapi-generator/src/main/resources/kotlin-client/libraries/jvm-spring-restclient/infrastructure/ApiClient.kt.mustache @@ -10,7 +10,7 @@ import org.springframework.util.LinkedMultiValueMap {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}open class ApiClient(protected val client: RestClient) { - protected inline fun request(requestConfig: RequestConfig): ResponseEntity { + protected inline fun request(requestConfig: RequestConfig): ResponseEntity { return prepare(defaults(requestConfig)) .retrieve() .toEntity(object : ParameterizedTypeReference() {}) @@ -32,7 +32,7 @@ import org.springframework.util.LinkedMultiValueMap } } - private fun RestClient.method(requestConfig: RequestConfig)= + private fun RestClient.method(requestConfig: RequestConfig) = method(HttpMethod.valueOf(requestConfig.method.name)) private fun RestClient.RequestBodyUriSpec.uri(requestConfig: RequestConfig) = 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 76cc01c1ef22..8a7eddfe62ec 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 @@ -12,7 +12,7 @@ import reactor.core.publisher.Mono {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}open class ApiClient(protected val client: WebClient) { - protected inline fun request(requestConfig: RequestConfig): Mono> { + protected inline fun request(requestConfig: RequestConfig): Mono> { return prepare(defaults(requestConfig)) .retrieve() .toEntity(object : ParameterizedTypeReference() {}) @@ -34,7 +34,7 @@ import reactor.core.publisher.Mono } } - private fun WebClient.method(requestConfig: RequestConfig)= + private fun WebClient.method(requestConfig: RequestConfig) = method(HttpMethod.valueOf(requestConfig.method.name)) private fun WebClient.RequestBodyUriSpec.uri(requestConfig: RequestConfig) = From 12abae40dc06883f16e5c32119896c970d4d5490 Mon Sep 17 00:00:00 2001 From: "hidde.wieringa" Date: Mon, 24 Nov 2025 13:44:37 +0100 Subject: [PATCH 2/2] samples --- .../org/openapitools/client/infrastructure/ApiClient.kt | 4 ++-- .../org/openapitools/client/infrastructure/ApiClient.kt | 4 ++-- .../org/openapitools/client/infrastructure/ApiClient.kt | 4 ++-- .../org/openapitools/client/infrastructure/ApiClient.kt | 4 ++-- .../org/openapitools/client/infrastructure/ApiClient.kt | 4 ++-- 5 files changed, 10 insertions(+), 10 deletions(-) diff --git a/samples/client/echo_api/kotlin-jvm-spring-3-restclient/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt b/samples/client/echo_api/kotlin-jvm-spring-3-restclient/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt index b1675a9ff649..22e19028adb8 100644 --- a/samples/client/echo_api/kotlin-jvm-spring-3-restclient/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt +++ b/samples/client/echo_api/kotlin-jvm-spring-3-restclient/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt @@ -10,7 +10,7 @@ import org.springframework.util.LinkedMultiValueMap open class ApiClient(protected val client: RestClient) { - protected inline fun request(requestConfig: RequestConfig): ResponseEntity { + protected inline fun request(requestConfig: RequestConfig): ResponseEntity { return prepare(defaults(requestConfig)) .retrieve() .toEntity(object : ParameterizedTypeReference() {}) @@ -32,7 +32,7 @@ open class ApiClient(protected val client: RestClient) { } } - private fun RestClient.method(requestConfig: RequestConfig)= + private fun RestClient.method(requestConfig: RequestConfig) = method(HttpMethod.valueOf(requestConfig.method.name)) private fun RestClient.RequestBodyUriSpec.uri(requestConfig: RequestConfig) = 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 ba18c122dbaa..73538f430c58 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 @@ -12,7 +12,7 @@ import reactor.core.publisher.Mono open class ApiClient(protected val client: WebClient) { - protected inline fun request(requestConfig: RequestConfig): Mono> { + protected inline fun request(requestConfig: RequestConfig): Mono> { return prepare(defaults(requestConfig)) .retrieve() .toEntity(object : ParameterizedTypeReference() {}) @@ -34,7 +34,7 @@ open class ApiClient(protected val client: WebClient) { } } - private fun WebClient.method(requestConfig: RequestConfig)= + private fun WebClient.method(requestConfig: RequestConfig) = method(HttpMethod.valueOf(requestConfig.method.name)) private fun WebClient.RequestBodyUriSpec.uri(requestConfig: RequestConfig) = 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 ba18c122dbaa..73538f430c58 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 @@ -12,7 +12,7 @@ import reactor.core.publisher.Mono open class ApiClient(protected val client: WebClient) { - protected inline fun request(requestConfig: RequestConfig): Mono> { + protected inline fun request(requestConfig: RequestConfig): Mono> { return prepare(defaults(requestConfig)) .retrieve() .toEntity(object : ParameterizedTypeReference() {}) @@ -34,7 +34,7 @@ open class ApiClient(protected val client: WebClient) { } } - private fun WebClient.method(requestConfig: RequestConfig)= + private fun WebClient.method(requestConfig: RequestConfig) = method(HttpMethod.valueOf(requestConfig.method.name)) private fun WebClient.RequestBodyUriSpec.uri(requestConfig: RequestConfig) = diff --git a/samples/client/petstore/kotlin-jvm-spring-3-restclient/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt b/samples/client/petstore/kotlin-jvm-spring-3-restclient/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt index b1675a9ff649..22e19028adb8 100644 --- a/samples/client/petstore/kotlin-jvm-spring-3-restclient/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt +++ b/samples/client/petstore/kotlin-jvm-spring-3-restclient/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt @@ -10,7 +10,7 @@ import org.springframework.util.LinkedMultiValueMap open class ApiClient(protected val client: RestClient) { - protected inline fun request(requestConfig: RequestConfig): ResponseEntity { + protected inline fun request(requestConfig: RequestConfig): ResponseEntity { return prepare(defaults(requestConfig)) .retrieve() .toEntity(object : ParameterizedTypeReference() {}) @@ -32,7 +32,7 @@ open class ApiClient(protected val client: RestClient) { } } - private fun RestClient.method(requestConfig: RequestConfig)= + private fun RestClient.method(requestConfig: RequestConfig) = method(HttpMethod.valueOf(requestConfig.method.name)) private fun RestClient.RequestBodyUriSpec.uri(requestConfig: RequestConfig) = 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 ba18c122dbaa..73538f430c58 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 @@ -12,7 +12,7 @@ import reactor.core.publisher.Mono open class ApiClient(protected val client: WebClient) { - protected inline fun request(requestConfig: RequestConfig): Mono> { + protected inline fun request(requestConfig: RequestConfig): Mono> { return prepare(defaults(requestConfig)) .retrieve() .toEntity(object : ParameterizedTypeReference() {}) @@ -34,7 +34,7 @@ open class ApiClient(protected val client: WebClient) { } } - private fun WebClient.method(requestConfig: RequestConfig)= + private fun WebClient.method(requestConfig: RequestConfig) = method(HttpMethod.valueOf(requestConfig.method.name)) private fun WebClient.RequestBodyUriSpec.uri(requestConfig: RequestConfig) =