void vs Mono<Void> in Spring webflux



我最近开始使用响应式流开发Spring Webflux应用。我有两个问题。

  1. voidMono<Void>的区别是什么

  2. 我有一个像下面这样的用例,我认为可以使用voidMono<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中执行链接。有人能解释一下如何使用voidMono<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!"));
}
}

最新更新