为了账号安全,请及时绑定邮箱和手机立即绑定

根据响应重试 WebClient

根据响应重试 WebClient

饮歌长啸 2023-08-16 16:16:37
我创建了一个 Spring webflux webclient。我想根据我的响应重复相同的操作。例如:如果数据仍然为空,我想重试获取数据。怎么做 ?Flux<Data> data = webClient.get()                .uri("/api/users?page=" + page)                .retrieve()                .flatMap(o -> {                  o.subscribe(data -> {                      if(data == null) {                         // WHAT TO DO HERE, TO REPEAT THE SAME CALL ?                         o.retry();                      }                });                return o;            })            .bodyToFlux(Data.class);
查看完整描述

1 回答

?
慕森王

TA贡献1777条经验 获得超3个赞

您可以使用retry(Predicate<? super Throwable> retryMatcher),它将根据可抛出条件重试该操作。


在下面的代码中,如果从客户端接收到的数据为空,我将返回 Mono.error,然后根据重试中的错误条件再次执行上述操作。


您还可以限制重试次数,


retry(long numRetries, Predicate<? super Throwable> retryMatcher)


final Flux<Data> flux = WebClient.create().get().uri("uri").exchange().flatMap(data -> {

      if (data == null)

        return Mono.error(new RuntimeException());

      return Mono.just(data);


    }).retry(throwable -> throwable instanceof RuntimeException)

        .flatMap(response -> response.bodyToMono(Data.class)).flux();


查看完整回答
反对 回复 2023-08-16
  • 1 回答
  • 0 关注
  • 102 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信