Ich habe eine Methode, die Mono als Parameter akzeptiert. Alles, was ich will, ist, den eigentlichen String daraus zu erhalten. Googled, fand aber keine Antwort außer Aufruf von block () über das Mono-Objekt, aber es wird ein Blockierungsaufruf ausgeführt, daher sollte block () nicht verwendet werden. Bitte schlagen Sie einen anderen Weg vor, wenn möglich. .__ Der Grund, warum ich diesen String brauche, liegt darin, dass ich innerhalb dieser Methode eine andere Methode aufrufen muss, sagen Sie print () mit dem tatsächlichen String-Wert.
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);
}
Zum Schluss hat es für mich funktioniert, die flatMap-Methode wie folgt aufzurufen:
public void getValue(Mono<String> monoString)
{
monoString.flatMap(this::print);
}
Es ist nicht einfach, eine String
aus einem Mono<String>
ohne einen blockierenden Aufruf zu erhalten. Per Definition. Wenn die Variable String
noch nicht verfügbar ist (was Mono<String>
erlaubt), können Sie sie nur erhalten, wenn Sie warten, bis sie hereinkommt.
Anstatt "eine String
" zu erhalten, erhalten Sie subscribe
für die Mono
und die Subscriber
, die Sie übergeben, die String
, sobald sie verfügbar wird (möglicherweise sofort). Z.B.
myMono.subscribe(
value -> Console.out.println(value),
error -> error.printStackTrace(),
() -> Console.out.println("completed without a value")
)
gibt den von myMono
erzeugten Wert oder Fehler aus (der Typ von value
ist String
, der Typ von error
ist Throwable
). Unter https://projectreactor.io/docs/core/release/api/reactor/core/publisher/Mono.html können Sie auch andere Varianten von subscribe
sehen.
Entsprechend der doc können Sie Folgendes tun:
String getValue(Mono<String> mono) {
return mono.block();
}
beachten Sie den Sperranruf
Was bei mir funktioniert hat war folgendes:
monoString.subscribe(this::print);