我最近开始使用响应式流开发Spring Webflux应用。我有两个问题。
-
void
和Mono<Void>
的区别是什么 -
我有一个像下面这样的用例,我认为可以使用
void
或Mono<Void>
进行改进@Service public class ABCService { public Mono<String> getGreeting(String name) { Mono.just(NameValidator.validate(name)) .map(isValid -> "Hello, "+name+". Welcome!"); } } public class NameValidator { public static boolean validate(String name) { if(StringUtils.isEmpty(name)) {throw new RuntimeException("Invalid name");} return true; } }
我实际上不需要validate()方法有一个布尔值返回类型。也可以是void/Mono<Void>
。我只返回true
在ABCService中执行链接。有人能解释一下如何使用void
和Mono<Void>
做同样的事情吗
如果您返回Mono,则不能使用map()
。我的意思是你可以使用它,但是因为Mono<Void>
永远不会发出一个值,而只是一个完成信号,你的map()
将永远不会生效。您需要将其替换为then()
:
@Service
public class ABCService {
public Mono<String> getGreeting(String name) {
NameValidator.validate(name)
.then(Mono.just("Hello, "+name+". Welcome!"));
}
}