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 c6d11989dcef..91463eaa179f 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 @@ -4,8 +4,9 @@ import org.springframework.core.ParameterizedTypeReference import org.springframework.http.HttpHeaders import org.springframework.http.HttpMethod import org.springframework.http.MediaType -import org.springframework.web.client.RestClient import org.springframework.http.ResponseEntity +import org.springframework.web.client.RestClient +import org.springframework.web.util.UriComponentsBuilder import org.springframework.util.LinkedMultiValueMap {{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}open class ApiClient(protected val client: RestClient) { @@ -35,12 +36,13 @@ import org.springframework.util.LinkedMultiValueMap private fun RestClient.method(requestConfig: RequestConfig)= method(HttpMethod.valueOf(requestConfig.method.name)) - private fun RestClient.RequestBodyUriSpec.uri(requestConfig: RequestConfig) = - uri(requestConfig.path) { builder -> - builder - .queryParams(LinkedMultiValueMap(requestConfig.query)) - .build(requestConfig.params) + private fun RestClient.RequestBodyUriSpec.uri(requestConfig: RequestConfig): RestClient.RequestBodySpec { + val uriComponentsBuilder = UriComponentsBuilder.fromPath(requestConfig.path) + requestConfig.query.forEach { key, values -> + uriComponentsBuilder.queryParam(key, "{$key}") } + return uri(uriComponentsBuilder.encode().buildAndExpand(requestConfig.query + requestConfig.params).toUri()) + } private fun RestClient.RequestBodySpec.headers(requestConfig: RequestConfig) = apply { requestConfig.headers.forEach { (name, value) -> header(name, value) } } 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 d13aa82aab69..43287db8fc44 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 @@ -4,8 +4,9 @@ import org.springframework.core.ParameterizedTypeReference import org.springframework.http.HttpHeaders import org.springframework.http.HttpMethod import org.springframework.http.MediaType -import org.springframework.web.client.RestClient import org.springframework.http.ResponseEntity +import org.springframework.web.client.RestClient +import org.springframework.web.util.UriComponentsBuilder import org.springframework.util.LinkedMultiValueMap open class ApiClient(protected val client: RestClient) { @@ -35,12 +36,13 @@ open class ApiClient(protected val client: RestClient) { private fun RestClient.method(requestConfig: RequestConfig)= method(HttpMethod.valueOf(requestConfig.method.name)) - private fun RestClient.RequestBodyUriSpec.uri(requestConfig: RequestConfig) = - uri(requestConfig.path) { builder -> - builder - .queryParams(LinkedMultiValueMap(requestConfig.query)) - .build(requestConfig.params) + private fun RestClient.RequestBodyUriSpec.uri(requestConfig: RequestConfig): RestClient.RequestBodySpec { + val uriComponentsBuilder = UriComponentsBuilder.fromPath(requestConfig.path) + requestConfig.query.forEach { key, values -> + uriComponentsBuilder.queryParam(key, "{$key}") } + return uri(uriComponentsBuilder.encode().buildAndExpand(requestConfig.query + requestConfig.params).toUri()) + } private fun RestClient.RequestBodySpec.headers(requestConfig: RequestConfig) = apply { requestConfig.headers.forEach { (name, value) -> header(name, value) } }