我是反应编程的新手,也是Spring Webflux的新手,我有一个方法可以从Redis获取一些键,如果这个键为null或者不等于指定的字符串,我想抛出一个异常,但是嵌套的donOnNext方法不会被调用,customerRepository.save(customer)
会被触发,同时必须抛出异常并中断链。有人能给我解释一下反应堆API在我的情况下是如何表现的吗?
这是我的方法:
@Override
public Mono<RegistrationVerificationResDTO> verifyCustomerAndGenerateToken(Mono<VerifyOtpReqDTO> verifyOtpReqDTO) {
return verifyOtpReqDTO
.doOnNext(verifyDTO -> reactiveRedisOperations
.opsForValue()
.get(RedisDictionary.OTP_KEY + verifyDTO.getPhoneNumber())
.filter(otp -> otp.equalsIgnoreCase(verifyDTO.getOtp()))
.switchIfEmpty(Mono.error(ForbiddenException::new)))
.map(verifyDTO -> customerRepository.findById(verifyDTO.getId())
.orElseThrow(() -> new NotFoundException("Customer not found")))
.doOnNext(customer -> {
customer.setVerified(true);
customerRepository.save(customer);
})
.map(customer -> new RegistrationVerificationResDTO().setAccessToken("accessToken")
.setRefreshToken("refreshToken")
.setCustomer(customer));
}
更新:我意识到,如果我们在doOnNext方法中创建另一个发布者,因为spring只订阅最外部的发布者,内部的发布者将不会被触发,我已经更新了代码,但它仍然不起作用。
我猜您说这个“不起作用”是因为您无法观察数据库中保存的customer
,即使您对第二个(最里面的)DoonNext
进行了(正确的)更改之后?
第三个DoonNext
有问题:CustomerRepository.Save(customer)
是一个NO-OP,假设CustomerRepository
是一个反应存储库,因为(懒惰的)Mono
既没有附加到主序列,也没有订阅。
只需将doOnNext
替换为FlatMap
(并将您对最内部doOnNext的更改保留为SwitchIfEmpty
),即可使其成为Spring将订阅的反应链的一部分。
我找不到合适的解释。我可以找到JVM被称为虚拟机的原因,但无法找到jre不被称为虚拟机的原因。请帮忙。
我有一个服务器-客户端应用程序不工作。这是代码:ChatServerHandler ChatServerInitializer 只是要提一下,其他一切都很好,信息只是没有收到。试图使用println在channelRead打印某些内容将不起作用。所以我知道它不会被打电话。另外,对不起,如果我不应该在这里发布整个代码,但我只是没有想法。
我已经在Windows 10中为Windows Installer安装了Anaconda 2019.03。当在Powershell上键入以 文件。 < li >如metod米多2所示卸载并安装,也没有任何改变。 < li >打开的Anaconda Powershell提示符除了“conda”无法识别之外,还出现以下错误: 实际上,路径 在我查看时并不存在。 列出的其他信息: 我已经在我的电脑上安装
正如标题所说,我根本无法让Quartz.net工作。我从NuGet获得了最新版本的Quartz.net(2.2.1)、Common.Logging(2.1.2)、Common.Logging.NLog(2.0.0)和NLog(2.1.0)。触发器没有被触发,而且石英绝对没有记录任何东西。我猜我搞砸了配置。 我的应用程序配置: 有一个作业和一个触发器与之相关: 调度程序将启动,作业和触发器将正确添加
我正在尝试在未来的预定时间生成警报。下面是代码 主要活动。Java语言 警报eceiever.java content\u main。xml 舱单 我试图在一分钟后生成警报,但不幸的是什么都没有发生。我在这里做错了什么?此外,即使在手机重启/关机然后打开后,我如何确保我的日程安排仍然有效?
我是spring webflux和reactor的新手,我希望在发生某些特定异常时有一个回退机制,根据我的研究,onErrorResume方法可以做到这一点,但它不会被调用,我得到500个内部服务器错误,而不是触发回退并阻止此错误。 注意:我使用Spring网络流量,这意味着它在Reactor项目的正常行为中做了一些改变 这是堆栈跟踪