1717package org .springframework .cloud .openfeign ;
1818
1919import java .util .ArrayList ;
20+ import java .util .Collection ;
2021import java .util .List ;
2122import java .util .Map ;
2223import 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