Skip to content

Commit d0e533d

Browse files
[kotlin-client][jvm-spring-*] Fixed URL encoding (#17493)
* [kotlin-client][jvm-spring-*] do URL encoding via the UrlBuilder instead of manual replacement * [kotlin-client][jvm-spring-*] Fixed imports * ensure up-to-date * Fixed syntax problem * Removed unnecessary toString()
1 parent cfe7dcc commit d0e533d

File tree

51 files changed

+381
-74
lines changed

Some content is hidden

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

51 files changed

+381
-74
lines changed

modules/openapi-generator/src/main/resources/kotlin-client/infrastructure/RequestConfig.kt.mustache

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ package {{packageName}}.infrastructure
1212
val method: RequestMethod,
1313
val path: String,
1414
val headers: MutableMap<String, String> = mutableMapOf(),
15+
val params: MutableMap<String, Any> = mutableMapOf(),
1516
val query: MutableMap<String, List<String>> = mutableMapOf(),
1617
val requiresAuthentication: Boolean,
1718
val body: T? = null

modules/openapi-generator/src/main/resources/kotlin-client/libraries/jvm-spring-restclient/api.mustache

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import org.springframework.http.converter.json.MappingJackson2HttpMessageConvert
1414
import org.springframework.http.ResponseEntity
1515
import org.springframework.http.MediaType
1616

17+
1718
{{#imports}}import {{import}}
1819
{{/imports}}
1920
import {{packageName}}.infrastructure.*
@@ -122,9 +123,16 @@ import {{packageName}}.infrastructure.*
122123
{{/consumes}}{{/hasConsumes}}{{/hasFormParams}}{{#hasProduces}}localVariableHeaders["Accept"] = "{{#produces}}{{{mediaType}}}{{^-last}}, {{/-last}}{{/produces}}"
123124
{{/hasProduces}}
124125

126+
val params = mutableMapOf<String, Any>(
127+
{{#pathParams}}
128+
"{{baseName}}" to {{#isContainer}}{{paramName}}.joinToString(","){{/isContainer}}{{^isContainer}}{{{paramName}}}{{#isEnum}}.value{{/isEnum}}{{/isContainer}},
129+
{{/pathParams}}
130+
)
131+
125132
return RequestConfig(
126133
method = RequestMethod.{{httpMethod}},
127-
path = "{{path}}"{{#pathParams}}.replace("{"+"{{baseName}}"+"}", encodeURIComponent({{#isContainer}}{{paramName}}.joinToString(","){{/isContainer}}{{^isContainer}}{{{paramName}}}{{#isEnum}}.value{{/isEnum}}.toString(){{/isContainer}})){{/pathParams}},
134+
path = "{{path}}",
135+
params = params,
128136
query = localVariableQuery,
129137
headers = localVariableHeaders,
130138
requiresAuthentication = {{#hasAuthMethods}}true{{/hasAuthMethods}}{{^hasAuthMethods}}false{{/hasAuthMethods}},

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

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@ import org.springframework.core.ParameterizedTypeReference
44
import org.springframework.http.HttpHeaders
55
import org.springframework.http.HttpMethod
66
import org.springframework.http.MediaType
7-
import org.springframework.web.util.UriUtils
87
import org.springframework.web.client.RestClient
98
import org.springframework.http.ResponseEntity
9+
import org.springframework.util.LinkedMultiValueMap
1010

1111
open class ApiClient(protected val client: RestClient) {
1212
@@ -32,19 +32,15 @@ open class ApiClient(protected val client: RestClient) {
3232
}
3333
}
3434

35-
protected fun encodeURIComponent(uriComponent: kotlin.String) =
36-
UriUtils.encodeFragment(uriComponent, Charsets.UTF_8)
37-
3835
private fun <I> RestClient.method(requestConfig: RequestConfig<I>)=
3936
method(HttpMethod.valueOf(requestConfig.method.name))
4037

4138
private fun <I> RestClient.RequestBodyUriSpec.uri(requestConfig: RequestConfig<I>) =
4239
uri { builder ->
43-
builder.path(requestConfig.path).apply {
44-
requestConfig.query.forEach { (name, value) ->
45-
queryParam(name, value)
46-
}
47-
}.build()
40+
builder
41+
.path(requestConfig.path)
42+
.queryParams(LinkedMultiValueMap(requestConfig.query))
43+
.build(requestConfig.params)
4844
}
4945

5046
private fun <I> RestClient.RequestBodySpec.headers(requestConfig: RequestConfig<I>) =

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

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import org.springframework.http.codec.json.Jackson2JsonEncoder
1414
import org.springframework.http.ResponseEntity
1515
import org.springframework.http.MediaType
1616
import reactor.core.publisher.Mono
17+
import org.springframework.util.LinkedMultiValueMap
1718

1819
{{#imports}}import {{import}}
1920
{{/imports}}
@@ -126,9 +127,16 @@ import {{packageName}}.infrastructure.*
126127
{{/consumes}}{{/hasConsumes}}{{/hasFormParams}}{{#hasProduces}}localVariableHeaders["Accept"] = "{{#produces}}{{{mediaType}}}{{^-last}}, {{/-last}}{{/produces}}"
127128
{{/hasProduces}}
128129

130+
val params = mutableMapOf<String, Any>(
131+
{{#pathParams}}
132+
"{{baseName}}" to {{#isContainer}}{{paramName}}.joinToString(","){{/isContainer}}{{^isContainer}}{{{paramName}}}{{#isEnum}}.value{{/isEnum}}{{/isContainer}},
133+
{{/pathParams}}
134+
)
135+
129136
return RequestConfig(
130137
method = RequestMethod.{{httpMethod}},
131-
path = "{{path}}"{{#pathParams}}.replace("{"+"{{baseName}}"+"}", encodeURIComponent({{#isContainer}}{{paramName}}.joinToString(","){{/isContainer}}{{^isContainer}}{{{paramName}}}{{#isEnum}}.value{{/isEnum}}.toString(){{/isContainer}})){{/pathParams}},
138+
path = "{{path}}",
139+
params = params,
132140
query = localVariableQuery,
133141
headers = localVariableHeaders,
134142
requiresAuthentication = {{#hasAuthMethods}}true{{/hasAuthMethods}}{{^hasAuthMethods}}false{{/hasAuthMethods}},

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

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@ import org.springframework.core.ParameterizedTypeReference
44
import org.springframework.http.HttpHeaders
55
import org.springframework.http.HttpMethod
66
import org.springframework.http.MediaType
7-
import org.springframework.web.util.UriUtils
87
import org.springframework.web.reactive.function.client.WebClient
98
import org.springframework.http.ResponseEntity
9+
import org.springframework.util.LinkedMultiValueMap
1010
import reactor.core.publisher.Mono
1111

1212
open class ApiClient(protected val client: WebClient) {
@@ -33,19 +33,15 @@ open class ApiClient(protected val client: WebClient) {
3333
}
3434
}
3535

36-
protected fun encodeURIComponent(uriComponent: kotlin.String) =
37-
UriUtils.encodeFragment(uriComponent, Charsets.UTF_8)
38-
3936
private fun <I> WebClient.method(requestConfig: RequestConfig<I>)=
4037
method(HttpMethod.valueOf(requestConfig.method.name))
4138

4239
private fun <I> WebClient.RequestBodyUriSpec.uri(requestConfig: RequestConfig<I>) =
4340
uri { builder ->
44-
builder.path(requestConfig.path).apply {
45-
requestConfig.query.forEach { (name, value) ->
46-
queryParam(name, value)
47-
}
48-
}.build()
41+
builder
42+
.path(requestConfig.path)
43+
.queryParams(LinkedMultiValueMap(requestConfig.query))
44+
.build(requestConfig.params)
4945
}
5046

5147
private fun <I> WebClient.RequestBodySpec.headers(requestConfig: RequestConfig<I>) =

samples/client/others/kotlin-jvm-okhttp-parameter-tests/src/main/kotlin/org/openapitools/client/infrastructure/RequestConfig.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ data class RequestConfig<T>(
1212
val method: RequestMethod,
1313
val path: String,
1414
val headers: MutableMap<String, String> = mutableMapOf(),
15+
val params: MutableMap<String, Any> = mutableMapOf(),
1516
val query: MutableMap<String, List<String>> = mutableMapOf(),
1617
val requiresAuthentication: Boolean,
1718
val body: T? = null

samples/client/petstore/kotlin-allOff-discriminator/src/main/kotlin/org/openapitools/client/infrastructure/RequestConfig.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ data class RequestConfig<T>(
1212
val method: RequestMethod,
1313
val path: String,
1414
val headers: MutableMap<String, String> = mutableMapOf(),
15+
val params: MutableMap<String, Any> = mutableMapOf(),
1516
val query: MutableMap<String, List<String>> = mutableMapOf(),
1617
val requiresAuthentication: Boolean,
1718
val body: T? = null

samples/client/petstore/kotlin-array-simple-string-jvm-okhttp3/src/main/kotlin/org/openapitools/client/infrastructure/RequestConfig.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ data class RequestConfig<T>(
1212
val method: RequestMethod,
1313
val path: String,
1414
val headers: MutableMap<String, String> = mutableMapOf(),
15+
val params: MutableMap<String, Any> = mutableMapOf(),
1516
val query: MutableMap<String, List<String>> = mutableMapOf(),
1617
val requiresAuthentication: Boolean,
1718
val body: T? = null

samples/client/petstore/kotlin-array-simple-string-jvm-okhttp4/src/main/kotlin/org/openapitools/client/infrastructure/RequestConfig.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ data class RequestConfig<T>(
1212
val method: RequestMethod,
1313
val path: String,
1414
val headers: MutableMap<String, String> = mutableMapOf(),
15+
val params: MutableMap<String, Any> = mutableMapOf(),
1516
val query: MutableMap<String, List<String>> = mutableMapOf(),
1617
val requiresAuthentication: Boolean,
1718
val body: T? = null

samples/client/petstore/kotlin-array-simple-string-multiplatform/src/commonMain/kotlin/org/openapitools/client/infrastructure/RequestConfig.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ data class RequestConfig<T>(
1212
val method: RequestMethod,
1313
val path: String,
1414
val headers: MutableMap<String, String> = mutableMapOf(),
15+
val params: MutableMap<String, Any> = mutableMapOf(),
1516
val query: MutableMap<String, List<String>> = mutableMapOf(),
1617
val requiresAuthentication: Boolean,
1718
val body: T? = null

0 commit comments

Comments
 (0)