当前位置: 首页 > 知识库问答 >
问题:

如何在reactive java中从Mono中获取String

弘承运
2023-03-14

我有一个接受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);
}

共有1个答案

法镜
2023-03-14

单字 获得字符串而不使用阻塞调用并不容易,这是不可能的。根据定义。如果字符串还不可用(mono 允许),则只能等待它出现,而这正是阻塞的意义所在。

不是“获取字符串”,而是订阅mono,当字符串可用时(可能立即),您传递的订阅者将获得该字符串。例如。

myMono.subscribe(
  value -> Console.out.println(value), 
  error -> error.printStackTrace(), 
  () -> Console.out.println("completed without a value")
)

将打印mymono产生的值或错误(value的类型是stringerror的类型是throwable)。在https://projectreactor.io/docs/core/release/api/reactor/core/publisher/mono.html,还可以看到subscribe的其他变体。

 类似资料:
  • 我尝试使处理程序和路由器类的Spring引导webflow。模型类是用户类。代码是 下面是webflux项目的处理程序类。在register方法中,我编写了id复制测试代码。但这是完全错误的。 我想提取的用户名或id字符串从Mono的Spring webflow.将需要任何评论。我被这部分卡住了。

  • 我是Reactor编程新手,需要MONO/Flux方面的帮助 我有POJO课程 受雇者Java语言 我在访问服务时返回了Mono,我需要从Mono中提取名称作为字符串。 但这再次返回Mono而不是字符串。我需要从这个Mono中提取String值。

  • 我在NoSQL文档db Photo和Property中有两个独立的集合,其中Photo有propertyId参数,这意味着我可以找到属于给定属性(如房子)的所有照片。通常情况下,如果没有反应,我只会: 就两行。如何在反应式编程中做到以上几点 不使用block()?`承担一项义务。findByPropertyId返回列表,在被动情况下返回通量。

  • 我在许多地方看到了关于如何使用代码获取表头的示例 像这里:如何防止TableView从做TableColsta重新排序在javaFX 8? 但是这个代码为我返回。 如何到达然后?

  • 我对反应性非常陌生,所以在范式转变中有点挣扎,但是也许有人能帮我克服这个问题? 我的控制器将Mono(称为“limit”)作为服务参数传递给我的服务。Mono在subscribe上发出一个整数,服务使用该整数执行其工作,该整数返回一个流量。 在我的服务方法中,我需要订阅mono,但我需要在我的服务方法(对其他endpoint进行web客户端REST调用)之前订阅mono,因为REST调用中需要限制

  • block()/blockfirst()/blocklast()正在阻塞,线程反应器-http-nio-2不支持这一点 这是正确的方法吗?还有另一种更好的方法来实现这一点?我也在想一些类似的事情: