多个 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
.
中复制一些东西
我正在使用 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
.