多个 ProxyExchangeArgumentResolver Bean

Multiple ProxyExchangeArgumentResolver Beans

我正在使用 spring-cloud-gateway,需要使用多个自定义 WebClient 来代理不同的请求。

拥有一个自定义 WebClient 没问题,参见

但是如果我定义了多个类型为 ProxyExchangeArgumentResolver 的 bean(每个都有不同的 supportsParameter 实现),ProxyResponseAutoConfiguration 失败于:

@Override
public void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) {
    argumentResolvers.add(context.getBean(ProxyExchangeArgumentResolver.class));
}

因为它只需要一个该类型的 bean。

知道如何解决这个问题吗?提前致谢。

好的,我通过仍然只有一个 ProxyExchangeArgumentResolver 类型的 Bean 并在 resolveArgument 方法中处理不同的 WebClients 来解决它:

public Mono<Object> resolveArgument(MethodParameter parameter, BindingContext bindingContext, ServerWebExchange exchange) {
    var webClientBeanName = parameter.getMethod().getAnnotation(UseWebClient.class).webClient();
    WebClient webClient = (WebClient) this.context.getBean(webClientBeanName);

    ProxyExchange<?> proxy = new ProxyExchange(webClient, exchange, bindingContext, this.type(parameter));
...
}

所以我使用一个新的注释来告诉使用哪个WebClient。然而,我不得不从 ProxyExchangeArgumentResolver.

中复制一些东西