Monoをパラメーターとして受け入れるメソッドがあります。それから実際の文字列を取得するだけです。 GoogledがMonoオブジェクトでblock()を呼び出す以外は答えを見つけられませんでしたが、ブロッキング呼び出しを行いますしたがって、block()の使用を避けたいです。可能な場合は別の方法を提案してください。必要な理由この文字列は、このメソッド内で、実際の文字列値を使用してprint()などの別のメソッドを呼び出す必要があるためです。これは簡単だと理解していますが、リアクティブプログラミングは初めてです。
コード:
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);
}
最後に私のために働いたのは以下のようなflatMapメソッドを呼び出すことです:
public void getValue(Mono<String> monoString)
{
monoString.flatMap(this::print);
}
ブロッキング呼び出しなしでMono<String>
からString
を取得するのは簡単ではありません。不可能です。定義により。 String
がまだ利用できない場合(Mono<String>
で許可されている場合)は、それが入るまで待ってそれを取得することはできません。
「String
を取得」する代わりに、subscribe
をMono
に渡し、渡したSubscriber
は、利用可能になったときにString
を取得します。 (多分すぐに)。例えば。
myMono.subscribe(
value -> Console.out.println(value),
error -> error.printStackTrace(),
() -> Console.out.println("completed without a value")
)
myMono
によって生成された値またはエラーを出力します(value
のタイプはString
、error
のタイプはThrowable
)。 https://projectreactor.io/docs/core/release/api/reactor/core/publisher/Mono.html では、subscribe
の他のバリアントも確認できます。
私のために働いたのは次のことでした:
monoString.subscribe(this::print);
より良い
monoUser.map(User::getId)