Skip to content

Commit a1d134b

Browse files
mplainsdeleuze
mplain
authored andcommitted
Add missing Kotlin extensions for WebClient.ResponseSpec
Closes gh-26030
1 parent 3c85c26 commit a1d134b

File tree

2 files changed

+49
-0
lines changed

2 files changed

+49
-0
lines changed

Diff for: spring-webflux/src/main/kotlin/org/springframework/web/reactive/function/client/WebClientExtensions.kt

+31
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ import kotlinx.coroutines.reactor.asFlux
2525
import kotlinx.coroutines.reactor.mono
2626
import org.reactivestreams.Publisher
2727
import org.springframework.core.ParameterizedTypeReference
28+
import org.springframework.http.ResponseEntity
2829
import org.springframework.web.reactive.function.client.WebClient.RequestBodySpec
2930
import org.springframework.web.reactive.function.client.WebClient.RequestHeadersSpec
3031
import reactor.core.publisher.Flux
@@ -138,3 +139,33 @@ inline fun <reified T : Any> WebClient.ResponseSpec.bodyToFlow(): Flow<T> =
138139
*/
139140
suspend inline fun <reified T : Any> WebClient.ResponseSpec.awaitBody() : T =
140141
bodyToMono<T>().awaitSingle()
142+
143+
/**
144+
* Extension for [WebClient.ResponseSpec.toEntity] providing a `toEntity<Foo>()` variant
145+
* leveraging Kotlin reified type parameters. This extension is not subject to type
146+
* erasure and retains actual generic type arguments.
147+
*
148+
* @since 5.3.2
149+
*/
150+
inline fun <reified T : Any> WebClient.ResponseSpec.toEntity(): Mono<ResponseEntity<T>> =
151+
toEntity(object : ParameterizedTypeReference<T>() {})
152+
153+
/**
154+
* Extension for [WebClient.ResponseSpec.toEntityList] providing a `toEntityList<Foo>()` variant
155+
* leveraging Kotlin reified type parameters. This extension is not subject to type
156+
* erasure and retains actual generic type arguments.
157+
*
158+
* @since 5.3.2
159+
*/
160+
inline fun <reified T : Any> WebClient.ResponseSpec.toEntityList(): Mono<ResponseEntity<List<T>>> =
161+
toEntityList(object : ParameterizedTypeReference<T>() {})
162+
163+
/**
164+
* Extension for [WebClient.ResponseSpec.toEntityFlux] providing a `toEntityFlux<Foo>()` variant
165+
* leveraging Kotlin reified type parameters. This extension is not subject to type
166+
* erasure and retains actual generic type arguments.
167+
*
168+
* @since 5.3.2
169+
*/
170+
inline fun <reified T : Any> WebClient.ResponseSpec.toEntityFlux(): Mono<ResponseEntity<Flux<T>>> =
171+
toEntityFlux(object : ParameterizedTypeReference<T>() {})

Diff for: spring-webflux/src/test/kotlin/org/springframework/web/reactive/function/client/WebClientExtensionsTests.kt

+18
Original file line numberDiff line numberDiff line change
@@ -125,5 +125,23 @@ class WebClientExtensionsTests {
125125
}
126126
}
127127

128+
@Test
129+
fun `ResponseSpec#toEntity with reified type parameters`() {
130+
responseSpec.toEntity<List<Foo>>()
131+
verify { responseSpec.toEntity(object : ParameterizedTypeReference<List<Foo>>() {}) }
132+
}
133+
134+
@Test
135+
fun `ResponseSpec#toEntityList with reified type parameters`() {
136+
responseSpec.toEntityList<List<Foo>>()
137+
verify { responseSpec.toEntityList(object : ParameterizedTypeReference<List<Foo>>() {}) }
138+
}
139+
140+
@Test
141+
fun `ResponseSpec#toEntityFlux with reified type parameters`() {
142+
responseSpec.toEntityFlux<List<Foo>>()
143+
verify { responseSpec.toEntityFlux(object : ParameterizedTypeReference<List<Foo>>() {}) }
144+
}
145+
128146
class Foo
129147
}

0 commit comments

Comments
 (0)