Skip to content

Commit b00c707

Browse files
gaerfieldsdeleuze
authored andcommitted
Introduce WebClient.ResponseSpec.awaitBodilessEntity()
This commit also allows awaitBody<Unit>() to be used. Closes gh-26504
1 parent 3718c8d commit b00c707

File tree

2 files changed

+32
-2
lines changed

2 files changed

+32
-2
lines changed

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

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,16 @@ inline fun <reified T : Any> WebClient.ResponseSpec.bodyToFlow(): Flow<T> =
138138
* @since 5.2
139139
*/
140140
suspend inline fun <reified T : Any> WebClient.ResponseSpec.awaitBody() : T =
141-
bodyToMono<T>().awaitSingle()
141+
when (T::class) {
142+
Unit::class -> awaitBodilessEntity().let { Unit as T }
143+
else -> bodyToMono<T>().awaitSingle()
144+
}
145+
146+
/**
147+
* Coroutines variant of [WebClient.ResponseSpec.toBodilessEntity].
148+
*/
149+
suspend fun WebClient.ResponseSpec.awaitBodilessEntity() =
150+
toBodilessEntity().awaitSingle()
142151

143152
/**
144153
* Extension for [WebClient.ResponseSpec.toEntity] providing a `toEntity<Foo>()` variant

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

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2002-2020 the original author or authors.
2+
* Copyright 2002-2021 the original author or authors.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -27,6 +27,7 @@ import org.assertj.core.api.Assertions.assertThat
2727
import org.junit.jupiter.api.Test
2828
import org.reactivestreams.Publisher
2929
import org.springframework.core.ParameterizedTypeReference
30+
import org.springframework.http.ResponseEntity
3031
import reactor.core.publisher.Flux
3132
import reactor.core.publisher.Mono
3233
import java.util.concurrent.CompletableFuture
@@ -125,6 +126,26 @@ class WebClientExtensionsTests {
125126
}
126127
}
127128

129+
@Test
130+
fun `awaitBody of type Unit`() {
131+
val spec = mockk<WebClient.ResponseSpec>()
132+
val entity = mockk<ResponseEntity<Void>>()
133+
every { spec.toBodilessEntity() } returns Mono.just(entity)
134+
runBlocking {
135+
assertThat(spec.awaitBody<Unit>()).isEqualTo(Unit)
136+
}
137+
}
138+
139+
@Test
140+
fun awaitBodilessEntity() {
141+
val spec = mockk<WebClient.ResponseSpec>()
142+
val entity = mockk<ResponseEntity<Void>>()
143+
every { spec.toBodilessEntity() } returns Mono.just(entity)
144+
runBlocking {
145+
assertThat(spec.awaitBodilessEntity()).isEqualTo(entity)
146+
}
147+
}
148+
128149
@Test
129150
fun `ResponseSpec#toEntity with reified type parameters`() {
130151
responseSpec.toEntity<List<Foo>>()

0 commit comments

Comments
 (0)