|
|
|
@ -17,6 +17,7 @@
@@ -17,6 +17,7 @@
|
|
|
|
|
package org.springframework.cloud.openfeign; |
|
|
|
|
|
|
|
|
|
import java.util.ArrayList; |
|
|
|
|
import java.util.Collection; |
|
|
|
|
import java.util.List; |
|
|
|
|
import java.util.Map; |
|
|
|
|
import java.util.Objects; |
|
|
|
@ -276,13 +277,8 @@ public class FeignClientFactoryBean
@@ -276,13 +277,8 @@ public class FeignClientFactoryBean
|
|
|
|
|
builder.encoder(getOrInstantiate(config.getEncoder())); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (Objects.nonNull(config.getDefaultRequestHeaders())) { |
|
|
|
|
builder.requestInterceptor(requestTemplate -> requestTemplate.headers(config.getDefaultRequestHeaders())); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (Objects.nonNull(config.getDefaultQueryParameters())) { |
|
|
|
|
builder.requestInterceptor(requestTemplate -> requestTemplate.queries(config.getDefaultQueryParameters())); |
|
|
|
|
} |
|
|
|
|
addDefaultRequestHeaders(config, builder); |
|
|
|
|
addDefaultQueryParams(config, builder); |
|
|
|
|
|
|
|
|
|
if (Objects.nonNull(config.getDecoder())) { |
|
|
|
|
builder.decoder(getOrInstantiate(config.getDecoder())); |
|
|
|
@ -301,6 +297,35 @@ public class FeignClientFactoryBean
@@ -301,6 +297,35 @@ public class FeignClientFactoryBean
|
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private void addDefaultQueryParams(FeignClientProperties.FeignClientConfiguration config, Feign.Builder builder) { |
|
|
|
|
Map<String, Collection<String>> defaultQueryParameters = config.getDefaultQueryParameters(); |
|
|
|
|
if (Objects.nonNull(defaultQueryParameters)) { |
|
|
|
|
builder.requestInterceptor(requestTemplate -> { |
|
|
|
|
Map<String, Collection<String>> queries = requestTemplate.queries(); |
|
|
|
|
defaultQueryParameters.keySet().forEach(key -> { |
|
|
|
|
if (!queries.containsKey(key)) { |
|
|
|
|
requestTemplate.query(key, defaultQueryParameters.get(key)); |
|
|
|
|
} |
|
|
|
|
}); |
|
|
|
|
}); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private void addDefaultRequestHeaders(FeignClientProperties.FeignClientConfiguration config, |
|
|
|
|
Feign.Builder builder) { |
|
|
|
|
Map<String, Collection<String>> defaultRequestHeaders = config.getDefaultRequestHeaders(); |
|
|
|
|
if (Objects.nonNull(defaultRequestHeaders)) { |
|
|
|
|
builder.requestInterceptor(requestTemplate -> { |
|
|
|
|
Map<String, Collection<String>> headers = requestTemplate.headers(); |
|
|
|
|
defaultRequestHeaders.keySet().forEach(key -> { |
|
|
|
|
if (!headers.containsKey(key)) { |
|
|
|
|
requestTemplate.header(key, defaultRequestHeaders.get(key)); |
|
|
|
|
} |
|
|
|
|
}); |
|
|
|
|
}); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private <T> T getOrInstantiate(Class<T> tClass) { |
|
|
|
|
try { |
|
|
|
|
return beanFactory != null ? beanFactory.getBean(tClass) : applicationContext.getBean(tClass); |
|
|
|
|