Spring MongodbReactive当结果为空时该怎么办

Spring MongodbReactive当结果为空时该怎么办,spring,spring-boot,spring-webflux,Spring,Spring Boot,Spring Webflux,如果在数据库中找不到电子邮件,findByEmail将返回null,因此会中断所有进程 public Mono<UserDto> findByEmail(String email) { return this.userRepository.findByEmail(email) // <---- ERROR HERE .map(userEntity -> userMapper.toDto(userEntity)) // <---- E

如果在数据库中找不到电子邮件,findByEmail将返回null,因此会中断所有进程

public Mono<UserDto> findByEmail(String email) {
    return this.userRepository.findByEmail(email) // <---- ERROR HERE 
            .map(userEntity -> userMapper.toDto(userEntity)) // <---- ERROR HERE 
            .switchIfEmpty(Mono.empty());
}

@Override
public Mono<String> authenticate(String accessToken) {
    return this.facebookService.verifyAccessToken(accessToken)
            .flatMap(userFacebookDto ->
                    this.findByEmail(userFacebookDto.getEmail()) 
                            .map(userDbDto -> {
                                String token = "";
                                if (isNull(userDbDto)) {
                                    UserEntity userEntity = this.userFacebookMapper.toEntity(userFacebookDto);
                                    this.userRepository.save(userEntity)
                                            .map(ue -> this.jwtTokenUtil.generateToken(ue));
                                } else {
                                    token = jwtTokenUtil.generateToken(this.userMapper.toEntity(null));
                                }
                                return token;
                            })
            );
}
公共Mono findByEmail(字符串电子邮件){
返回此.userRepository.findByEmail(电子邮件)//userMapper.toDto(userEntity))//
this.findByEmail(userFacebookDto.getEmail())
.map(userDbDto->{
字符串标记=”;
if(isNull(userDbDto)){
UserEntity UserEntity=this.userFacebookMapper.toEntity(userFacebookDto);
this.userRepository.save(userEntity)
.map(ue->this.jwtTokenUtil.generateToken(ue));
}否则{
token=jwtTokenUtil.generateToken(this.userMapper.toEntity(null));
}
返回令牌;
})
);
}
对于这种情况,您认为什么是好的链接策略,以便继续执行其余代码

错误:
“映射程序返回了一个空单声道”

请澄清:1。作为
findByEmail
参数的电子邮件传递是否为空?或者,
userRepository.findByEmail(电子邮件)
返回空值?2.还有一个问题,
userRepository.findByEmail(email)
在未找到
userEntity
时返回什么?被动mongo存储库不应返回null,因此您的问题可能存在于其他地方。要找到确切的位置,可以启用调试模式。请参阅:@MartinTarjányi如果mongo存储库没有找到什么东西,它会返回什么?@TaoufikJabbari它会返回空的Mono。@MartinTarjányi空的Mono不是空的?如果它转到下一个。映射它在输入中得到什么?一个空的?请解释findById将如何发送mono.empty,然后发送next.map或.flatMap。他将在其中的lamba参数中获得什么?请澄清:1。作为
findByEmail
参数的电子邮件传递是否为空?或者,
userRepository.findByEmail(电子邮件)
返回空值?2.还有一个问题,
userRepository.findByEmail(email)
在未找到
userEntity
时返回什么?被动mongo存储库不应返回null,因此您的问题可能存在于其他地方。要找到确切的位置,可以启用调试模式。请参阅:@MartinTarjányi如果mongo存储库没有找到什么东西,它会返回什么?@TaoufikJabbari它会返回空的Mono。@MartinTarjányi空的Mono不是空的?如果它转到下一个。映射它在输入中得到什么?一个空的?请解释findById将如何发送mono.empty,然后发送next.map或.flatMap。他将在其中的lamba参数中得到什么?