Skip to content

Commit c761919

Browse files
committed
Only add default query params and default headers if not already in template. Fixes gh-590.
1 parent 998baed commit c761919

File tree

1 file changed

+32
-7
lines changed

1 file changed

+32
-7
lines changed

spring-cloud-openfeign-core/src/main/java/org/springframework/cloud/openfeign/FeignClientFactoryBean.java

Lines changed: 32 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
package org.springframework.cloud.openfeign;
1818

1919
import java.util.ArrayList;
20+
import java.util.Collection;
2021
import java.util.List;
2122
import java.util.Map;
2223
import java.util.Objects;
@@ -276,13 +277,8 @@ protected void configureUsingProperties(FeignClientProperties.FeignClientConfigu
276277
builder.encoder(getOrInstantiate(config.getEncoder()));
277278
}
278279

279-
if (Objects.nonNull(config.getDefaultRequestHeaders())) {
280-
builder.requestInterceptor(requestTemplate -> requestTemplate.headers(config.getDefaultRequestHeaders()));
281-
}
282-
283-
if (Objects.nonNull(config.getDefaultQueryParameters())) {
284-
builder.requestInterceptor(requestTemplate -> requestTemplate.queries(config.getDefaultQueryParameters()));
285-
}
280+
addDefaultRequestHeaders(config, builder);
281+
addDefaultQueryParams(config, builder);
286282

287283
if (Objects.nonNull(config.getDecoder())) {
288284
builder.decoder(getOrInstantiate(config.getDecoder()));
@@ -301,6 +297,35 @@ protected void configureUsingProperties(FeignClientProperties.FeignClientConfigu
301297
}
302298
}
303299

300+
private void addDefaultQueryParams(FeignClientProperties.FeignClientConfiguration config, Feign.Builder builder) {
301+
Map<String, Collection<String>> defaultQueryParameters = config.getDefaultQueryParameters();
302+
if (Objects.nonNull(defaultQueryParameters)) {
303+
builder.requestInterceptor(requestTemplate -> {
304+
Map<String, Collection<String>> queries = requestTemplate.queries();
305+
defaultQueryParameters.keySet().forEach(key -> {
306+
if (!queries.containsKey(key)) {
307+
requestTemplate.query(key, defaultQueryParameters.get(key));
308+
}
309+
});
310+
});
311+
}
312+
}
313+
314+
private void addDefaultRequestHeaders(FeignClientProperties.FeignClientConfiguration config,
315+
Feign.Builder builder) {
316+
Map<String, Collection<String>> defaultRequestHeaders = config.getDefaultRequestHeaders();
317+
if (Objects.nonNull(defaultRequestHeaders)) {
318+
builder.requestInterceptor(requestTemplate -> {
319+
Map<String, Collection<String>> headers = requestTemplate.headers();
320+
defaultRequestHeaders.keySet().forEach(key -> {
321+
if (!headers.containsKey(key)) {
322+
requestTemplate.header(key, defaultRequestHeaders.get(key));
323+
}
324+
});
325+
});
326+
}
327+
}
328+
304329
private <T> T getOrInstantiate(Class<T> tClass) {
305330
try {
306331
return beanFactory != null ? beanFactory.getBean(tClass) : applicationContext.getBean(tClass);

0 commit comments

Comments
 (0)