diff --git a/spring-messaging/src/main/kotlin/org/springframework/messaging/rsocket/RSocketRequesterExtensions.kt b/spring-messaging/src/main/kotlin/org/springframework/messaging/rsocket/RSocketRequesterExtensions.kt index 5677c94d53..a51a69e552 100644 --- a/spring-messaging/src/main/kotlin/org/springframework/messaging/rsocket/RSocketRequesterExtensions.kt +++ b/spring-messaging/src/main/kotlin/org/springframework/messaging/rsocket/RSocketRequesterExtensions.kt @@ -112,6 +112,15 @@ suspend fun RSocketRequester.RequestSpec.sendAndAwait() { suspend inline fun RSocketRequester.RequestSpec.retrieveAndAwait(): T = retrieveMono(object : ParameterizedTypeReference() {}).awaitSingle() +/** + * Nullable coroutines variant of [RSocketRequester.RequestSpec.retrieveMono]. + * + * @author Sebastien Deleuze + * @since 5.2.1 + */ +suspend inline fun RSocketRequester.RequestSpec.retrieveAndAwaitOrNull(): T? = + retrieveMono(object : ParameterizedTypeReference() {}).awaitFirstOrNull() + /** * Coroutines variant of [RSocketRequester.RequestSpec.retrieveFlux]. * diff --git a/spring-messaging/src/test/kotlin/org/springframework/messaging/rsocket/RSocketRequesterExtensionsTests.kt b/spring-messaging/src/test/kotlin/org/springframework/messaging/rsocket/RSocketRequesterExtensionsTests.kt index fcb5b3b876..065476966e 100644 --- a/spring-messaging/src/test/kotlin/org/springframework/messaging/rsocket/RSocketRequesterExtensionsTests.kt +++ b/spring-messaging/src/test/kotlin/org/springframework/messaging/rsocket/RSocketRequesterExtensionsTests.kt @@ -120,6 +120,15 @@ class RSocketRequesterExtensionsTests { } } + @Test + fun retrieveAndAwaitOrNull() { + val requestSpec = mockk() + every { requestSpec.retrieveMono(match>(stringTypeRefMatcher)) } returns Mono.empty() + runBlocking { + assertThat(requestSpec.retrieveAndAwaitOrNull()).isNull() + } + } + @Test fun retrieveFlow() { val requestSpec = mockk()