无法解析“Mono”中的“doOnSuccessOrError”方法

问题描述 投票:0回答:1

我有这个 Spring Gateway 代码,我想将其迁移到最新的 Spring Cloud 3:

@Component
public class CorrelationIdApiFilter implements WebFilter {
  
  @Override
  public Mono<Void> filter(ServerWebExchange exchange, WebFilterChain chain) {
    if (......) {
      ServerWebExchange obj = ......

      return chain.filter(obj).doOnSuccessOrError((resp, ex) -> MDC.clear());
    }
    return chain.filter(exchange);
  }
}

我收到错误:

Cannot resolve method 'doOnSuccessOrError' in 'Mono'

我尝试这样编辑代码:

@Component
public class CorrelationIdApiFilter implements WebFilter {
  
  @Override
  public Mono<Void> filter(ServerWebExchange exchange, WebFilterChain chain) {
    if (......) {
      ServerWebExchange obj = ......

      return chain.filter(obj).doOnSuccess((resp) -> MDC.clear()).doOnError(ex);
    }
    return chain.filter(exchange);
  }
}

但我明白了

Cannot resolve symbol 'ex'
。您知道迁移代码的正确方法是什么吗?

spring spring-boot spring-webflux spring-cloud-gateway
1个回答
0
投票

doOnSuccessOrError
已弃用并在
3.4.0
中删除。根据文档

更喜欢使用 doOnNext(Consumer)、doOnError(Consumer)、doOnTerminate(Runnable) 或 doOnSuccess(Consumer)

就你而言

return chain.filter(obj)
    .doOnSuccess(resp -> MDC.clear())
    .doOnError(ex -> MDC.clear());
© www.soinside.com 2019 - 2024. All rights reserved.