Spring webflux 中的 void 与 Mono<Void>
void vs Mono<Void> in Spring webflux
我最近开始使用反应流开发 Spring Webflux 应用程序。我有 2 个问题。
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() 方法来获得 boolean return 类型。它可能是 void/Mono<Void>
而不是。我只 return true
在 ABCService 中执行链接。有人可以解释如何使用 void
和 Mono<Void>
做同样的事情吗
如果您 return 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!"));
}
}
我最近开始使用反应流开发 Spring Webflux 应用程序。我有 2 个问题。
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() 方法来获得 boolean return 类型。它可能是 void/Mono<Void>
而不是。我只 return true
在 ABCService 中执行链接。有人可以解释如何使用 void
和 Mono<Void>
如果您 return 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!"));
}
}