Spring 如何从MONO/FLUX中提取字符串值-

Spring 如何从MONO/FLUX中提取字符串值-,spring,spring-webflux,Spring,Spring Webflux,我是反应堆编程新手,需要MONO/Flux方面的帮助 我有POJO课 Employee.java class Employee { String name } 我在点击服务时返回Mono,我需要从Mono中提取名称作为字符串 Mono<Employee> m = m.map(value -> value.getName()) Mono m=m.map(value->value.getName()) 但这会再次返回一个Mono,而不是字符串。我需要从这个Mono中提

我是反应堆编程新手,需要MONO/Flux方面的帮助

我有POJO课

Employee.java

class Employee {
   String name
}
我在点击服务时返回Mono,我需要从Mono中提取名称作为字符串

Mono<Employee> m = m.map(value -> value.getName()) 
Mono m=m.map(value->value.getName())

但这会再次返回一个Mono,而不是字符串。我需要从这个Mono中提取字符串值。

您应该这样做:

m.block().getName();
Mono.just(new Employee().setName("Kill"))
    .switchIfEmpty(Mono.defer(() -> Mono.just(new Employee("Bill"))))
    .block()
    .getName();
此解决方案不考虑空检查

标准做法是:

Employee e = m.block();
if (null != e) {
   e.getName();
}
但使用flux时,您应该继续使用以下内容:

m.block().getName();
Mono.just(new Employee().setName("Kill"))
    .switchIfEmpty(Mono.defer(() -> Mono.just(new Employee("Bill"))))
    .block()
    .getName();

请记住,如果可能,应避免请求阻塞操作:它会阻塞流

您应该避免
block()
,因为它将无限期阻塞,直到收到下一个信号为止

您不应该认为反应容器是为您的程序提供答案的东西。相反,你需要给它任何你想做的答案。例如:

employeeMono.subscribe(value -> whatYouWantToDoWithName(value.getName()));

要从mono中检索对象,必须阻止ref: