gpt4 book ai didi

java - Spring WebFlux : Emit exception upon null value in Spring Data MongoDB reactive repositories?

转载 作者:搜寻专家 更新时间:2023-11-01 01:09:45 34 4
gpt4 key购买 nike

我正在尝试通过 spring-boot 2.0.0.M2 学习如何使用 MongoDB 响应式(Reactive)存储库,但我担心我没有按预期做事。

这是我的方法之一,它试图找到一个 User通过他们的电子邮件。但如果没有,该方法应该抛出异常。

@Override
public Mono<User> findByEmail(String email) {
User user = repository.findByEmail(email).block();
if(user == null) {
throw new NotFoundException("No user account was found with email: " + email);
}
return Mono.just(user);
}

存储库扩展 ReactiveCrudRepository<User, String> , 但我担心通过使用 .block()我正在阻止这种方法产生 react 。我是响应式(Reactive)编程的新手,我很难找到关于它的好文档。有人可以指出我正确的方向吗?

最佳答案

响应式编程需要一个端到端的响应式流程,才能获得来自响应式编程模型的实际好处。在流中调用 .block() 会强制同步,这被认为是一种反模式。

对于您的代码,只需传播从 ReactiveCrudRepository 获取的 Mono 并应用 switchIfEmpty 运算符在 时发出错误信号>Mono 在不发出值的情况下终止。 Reactive Streams 规范(Project Reactor 所基于的规范)中不允许使用 null 值。如果结果不产生任何值,则 Publisher 不会发出值。

@Override
public Mono<User> findByEmail(String email) {

Mono<User> fallback = Mono.error(new NotFoundException("No user account was found with email: " + email));
return repository.findByEmail(email).switchIfEmpty(fallback);
}

另见:

关于java - Spring WebFlux : Emit exception upon null value in Spring Data MongoDB reactive repositories?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45365791/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com