gpt4 book ai didi

spring - 如何处理 Spring reactor Mono 或 Flux 中的错误?

转载 作者:行者123 更新时间:2023-12-03 18:21:33 25 4
gpt4 key购买 nike

我有以下代码重新调整 Mono :

try {
return userRepository.findById(id) // step 1
.flatMap(user -> barRepository.findByUserId( user.getId()) // step 2
.map(bar-> Foo.builder().msg("Already exists").build()) // step 3
.switchIfEmpty(barRepository.save(Bar.builder().userId(user.getId()).build()) // step 4
.map(bar-> Foo.builder().msg("Created").build()) // step 5
))
.doOnError(throwable -> Mono.just(handleError(throwable)));
} catch(Exception e) {

log.error("from catch block");
return Mono.just(handleError(e));

}

如果在步骤 1 中发生错误(例如,指定的 id 不存在用户),它会被 doOnError 或 try catch block 捕获,还是这两者都没有?

如果在第 2 步、第 3 步、第 4 步中发生错误,则同样的问题。

什么是正确的代码,这样错误总是被 doOnError 捕获并消除 try catch?

我在用 public interface UserRepository extends ReactiveMongoRepository<User, String> barRepository 相同。

handleError(throwable) 只是简单地执行 log.error(e.getMessage() 并重新调整 Foo。

最佳答案

我认为第一个错误在标题中:“Mono or Flux”与错误处理无关。

  • 单声道 最多只能发出一项(流一个元素)
  • 助焊剂 可以发出更复杂的东西(即列表)

  • 要处理错误,您可以按照以下示例进行操作:
    return webClient.get()
    .uri(url)
    .retrieve()
    .bodyToMono(ModelYouAreRetrieving.class)
    .doOnError(throwable -> logger.error("Failed for some reason", throwable))
    .onErrorReturn(new ModelYouAreRetrieving(...))
    .block();

    关于spring - 如何处理 Spring reactor Mono 或 Flux 中的错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51024279/

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