'Multiple ProxyExchangeArgumentResolver Beans
I am working with spring-cloud-gateway and have the need to use multiple custom WebClients to proxy different requests.
Having one custom WebClient
is no problem, see https://stackoverflow.com/a/64865408.
But if I define multiple beans of type ProxyExchangeArgumentResolver
(each with a different supportsParameter
implementation) the ProxyResponseAutoConfiguration
fails at:
@Override
public void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) {
argumentResolvers.add(context.getBean(ProxyExchangeArgumentResolver.class));
}
Because it is expecting only ONE bean of that type.
Any idea how to resolve this? Thanks in advance.
Solution 1:[1]
Ok I solved it by still having just one Bean of type ProxyExchangeArgumentResolver
and handle the different WebClients within the resolveArgument
Method:
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));
...
}
So I use a new Annotation to tell which WebClient to use. I however had to duplicate several things from the ProxyExchangeArgumentResolver
.
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
Solution | Source |
---|---|
Solution 1 | Ralf |