如何在响应式 java 中从 Mono<String> 获取字符串

新手上路,请多包涵

我有一个接受 Mono 作为参数的方法。我想要的只是从中获取实际的字符串。用谷歌搜索但除了在 Mono 对象上调用 block() 之外没有找到答案,但它会进行阻塞调用 ,因此要避免使用 block()。如果可能,请建议其他方式。 我需要这个 String 的原因是因为在这个方法中我需要用实际的 String 值调用另一个方法 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);
}

原文由 nanosoft 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 2.8k
2 个回答

最后对我有用的是像下面这样调用 flatMap 方法:

 public void getValue(Mono<String> monoString)
{
   monoString.flatMap(this::print);
}

原文由 nanosoft 发布,翻译遵循 CC BY-SA 3.0 许可协议

从 --- String 获取 Mono<String> 没有阻塞调用并不容易,这是不可能的。根据定义。如果 String 尚不可用( Mono<String> 允许),除非等到它进来,否则你无法获得它,这就是阻塞。

Instead of “getting a String ” you subscribe to the Mono and the Subscriber you pass will get the String 当它可用时(可能是立即)。例如

myMono.subscribe(
  value -> System.out.println(value),
  error -> error.printStackTrace(),
  () -> System.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 )。在 https://projectreactor.io/docs/core/release/api/reactor/core/publisher/Mono.html 你也可以看到 subscribe 的其他变体。

原文由 Alexey Romanov 发布,翻译遵循 CC BY-SA 4.0 许可协议

推荐问题