我有这个 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'
。您知道迁移代码的正确方法是什么吗?
doOnSuccessOrError
已弃用并在 3.4.0
中删除。根据文档
更喜欢使用 doOnNext(Consumer)、doOnError(Consumer)、doOnTerminate(Runnable) 或 doOnSuccess(Consumer)
就你而言
return chain.filter(obj)
.doOnSuccess(resp -> MDC.clear())
.doOnError(ex -> MDC.clear());