diff --git a/spring-webflux/src/main/kotlin/org/springframework/web/reactive/function/client/WebClientExtensions.kt b/spring-webflux/src/main/kotlin/org/springframework/web/reactive/function/client/WebClientExtensions.kt index 12b13e920bda..243048824ca6 100644 --- a/spring-webflux/src/main/kotlin/org/springframework/web/reactive/function/client/WebClientExtensions.kt +++ b/spring-webflux/src/main/kotlin/org/springframework/web/reactive/function/client/WebClientExtensions.kt @@ -138,7 +138,16 @@ inline fun WebClient.ResponseSpec.bodyToFlow(): Flow = * @since 5.2 */ suspend inline fun WebClient.ResponseSpec.awaitBody() : T = - bodyToMono().awaitSingle() + when (T::class) { + Unit::class -> awaitBodilessEntity().let { Unit as T } + else -> bodyToMono().awaitSingle() + } + +/** + * Coroutines variant of [WebClient.ResponseSpec.toBodilessEntity]. + */ +suspend inline fun WebClient.ResponseSpec.awaitBodilessEntity() = + toBodilessEntity().awaitSingle() /** * Extension for [WebClient.ResponseSpec.toEntity] providing a `toEntity()` variant diff --git a/spring-webflux/src/test/kotlin/org/springframework/web/reactive/function/client/WebClientExtensionsTests.kt b/spring-webflux/src/test/kotlin/org/springframework/web/reactive/function/client/WebClientExtensionsTests.kt index f9ace0e04b76..9e06b65154d1 100644 --- a/spring-webflux/src/test/kotlin/org/springframework/web/reactive/function/client/WebClientExtensionsTests.kt +++ b/spring-webflux/src/test/kotlin/org/springframework/web/reactive/function/client/WebClientExtensionsTests.kt @@ -125,6 +125,24 @@ class WebClientExtensionsTests { } } + @Test + fun `awaitBody of type Unit`() { + val spec = mockk() + every { spec.toBodilessEntity() } returns Mono.empty() + runBlocking { + assertThat(spec.awaitBody()).isEqualTo(Unit) + } + } + + @Test + fun awaitBodilessEntity() { + val spec = mockk() + every { spec.toBodilessEntity() } returns Mono.empty() + runBlocking { + assertThat(spec.awaitBodilessEntity()).isEqualTo(Unit) + } + } + @Test fun `ResponseSpec#toEntity with reified type parameters`() { responseSpec.toEntity>()