I have a method which accepts Mono as a param. All I want is to get the actual String from it. Googled but didn't find answer except calling block() over Mono object but it will make a blocking call so want to avoid using block(). Please suggest other way if possible. The reason why I need this String is because inside this method I need to call another method say print() with the actual String value. I understand this is easy but I am new to reactive programming.
Code:
public String getValue(Mono<String> monoString)
{
// How to get actual String from param monoString
//and call print(String) method
}
public void print(String str)
{
System.out.println(str);
}
Getting a String
from a Mono<String>
without a blocking call isn't easy, it's impossible. By definition. If the String
isn't available yet (which Mono<String>
allows), you can't get it except by waiting until it comes in and that's exactly what blocking is.
Instead of "getting a String
" you subscribe
to the Mono
and the Subscriber
you pass will get the String
when it becomes available (maybe immediately). E.g.
myMono.subscribe(
value -> Console.out.println(value),
error -> error.printStackTrace(),
() -> Console.out.println("completed without a value")
)
will print the value or error produced by myMono
(type of value
is String
, type of error
is Throwable
). At https://projectreactor.io/docs/core/release/api/reactor/core/publisher/Mono.html you can see other variants of subscribe
too.