从通量中提取字符串&;lt;字符串&;>引发类型不匹配:无法从Disposable转换为字符串 [英] To take a String from a Flux<String> throws type mismatch: Cannot convert from Disposable to String
本文介绍了从通量中提取字符串&;lt;字符串&;>引发类型不匹配:无法从Disposable转换为字符串的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
关于this question to take a string from a Mono我想我终于知道如何像这样从String
中取出String
:
Flux<String> rates = controller.getRate(json);
String myRate = rates.next().subscribe(System.out::print);
但是,这会导致类型不匹配cannot convert from Disposable to String
我哪里搞错了?
澄清一下,它是为了测试--我需要一个内部字符串值。因此,如果我有一个Flux<String>
字符串:one
、two
、three
,那么我希望将另一个字符串设置为值one
String s = ...
如果我尝试
String s = rates.doOnNext(System.out::print);
然后我收到type mismatch: cannot convert from Flux<String> to String
如果我尝试
String s = next().flatMap(System.out::print);
然后我收到type mismatch: cannot convert from Mono<Object> to String
推荐答案
我哪里搞错了?
尚不清楚您要实现的目标,但这里可能有几件事:
- A
Flux<String>
返回0..n个字符串流,您是否一定只想要它返回的第一个字符串流(这正是next()
所做的?) - 从发布者获取值实际上有两种选择--可以使用反应链进行异步获取,也可以阻塞线程直到它完成,然后直接获取它。(请注意,如果您阻止,您将失去反应式框架提供给您的所有优势,因此这实际上是您想要做的事情是很少的。)在此示例中,看起来您正在订阅,但也试图阻止,这没有任何意义-您需要选择其中之一。
- 如果您不想阻止,并且您使用的是像WebFlux这样的反应式框架,那么订阅通常就是框架的工作--您只需将您的反应式调用向上传递,直到最终在您的控制器方法上返回
Mono
或Flux
。(只有当您不使用框架,并且自己管理整个反应链+事件循环时,订阅才真正有效。) - 如果您不想阻止,但希望确保值一发出就打印出来(称为副作用),则可以使用
doOnNext(System.out::print)
作为反应链的一部分来实现此目的。
这篇关于从通量中提取字符串&;lt;字符串&;>引发类型不匹配:无法从Disposable转换为字符串的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文