1818
1919import java .util .ArrayList ;
2020import java .util .Collection ;
21+ import java .util .HashMap ;
2122import java .util .List ;
2223import java .util .Map ;
2324import java .util .Objects ;
7273 * @author Hyeonmin Park
7374 * @author Felix Dittrich
7475 * @author Dominique Villard
75- * @athor Can Bezmen
76+ * @author Can Bezmen
7677 */
7778public class FeignClientFactoryBean
7879 implements FactoryBean <Object >, InitializingBean , ApplicationContextAware , BeanFactoryAware {
@@ -178,6 +179,8 @@ protected void configureFeign(FeignClientFactory context, Feign.Builder builder)
178179 configureUsingProperties (properties .getConfig ().get (contextId ), builder );
179180 configureUsingConfiguration (context , builder );
180181 }
182+ configureDefaultRequestElements (properties .getConfig ().get (properties .getDefaultConfig ()),
183+ properties .getConfig ().get (contextId ), builder );
181184 }
182185 else {
183186 configureUsingConfiguration (context , builder );
@@ -298,9 +301,6 @@ protected void configureUsingProperties(FeignClientProperties.FeignClientConfigu
298301 builder .encoder (getOrInstantiate (config .getEncoder ()));
299302 }
300303
301- addDefaultRequestHeaders (config , builder );
302- addDefaultQueryParams (config , builder );
303-
304304 if (Objects .nonNull (config .getDecoder ())) {
305305 builder .decoder (getOrInstantiate (config .getDecoder ()));
306306 }
@@ -322,33 +322,49 @@ protected void configureUsingProperties(FeignClientProperties.FeignClientConfigu
322322 }
323323 }
324324
325- private void addDefaultQueryParams (FeignClientProperties .FeignClientConfiguration config , Feign .Builder builder ) {
326- Map <String , Collection <String >> defaultQueryParameters = config .getDefaultQueryParameters ();
327- if (Objects .nonNull (defaultQueryParameters )) {
328- builder .requestInterceptor (requestTemplate -> {
329- Map <String , Collection <String >> queries = requestTemplate .queries ();
330- defaultQueryParameters .keySet ().forEach (key -> {
331- if (!queries .containsKey (key )) {
332- requestTemplate .query (key , defaultQueryParameters .get (key ));
333- }
334- });
335- });
325+ protected void configureDefaultRequestElements (FeignClientProperties .FeignClientConfiguration defaultConfig ,
326+ FeignClientProperties .FeignClientConfiguration clientConfig , Feign .Builder builder ) {
327+ Map <String , Collection <String >> defaultRequestHeaders = defaultConfig != null
328+ ? defaultConfig .getDefaultRequestHeaders () : new HashMap <>();
329+ if (clientConfig != null ) {
330+ defaultRequestHeaders .putAll (clientConfig .getDefaultRequestHeaders ());
331+ }
332+ if (!defaultRequestHeaders .isEmpty ()) {
333+ addDefaultRequestHeaders (defaultRequestHeaders , builder );
334+ }
335+
336+ Map <String , Collection <String >> defaultQueryParameters = defaultConfig != null
337+ ? defaultConfig .getDefaultQueryParameters () : new HashMap <>();
338+ if (clientConfig != null ) {
339+ defaultQueryParameters .putAll (clientConfig .getDefaultQueryParameters ());
340+ }
341+ if (!defaultQueryParameters .isEmpty ()) {
342+ addDefaultQueryParams (defaultQueryParameters , builder );
336343 }
344+
337345 }
338346
339- private void addDefaultRequestHeaders (FeignClientProperties .FeignClientConfiguration config ,
347+ private void addDefaultQueryParams (Map <String , Collection <String >> defaultQueryParameters , Feign .Builder builder ) {
348+ builder .requestInterceptor (requestTemplate -> {
349+ Map <String , Collection <String >> queries = requestTemplate .queries ();
350+ defaultQueryParameters .keySet ().forEach (key -> {
351+ if (!queries .containsKey (key )) {
352+ requestTemplate .query (key , defaultQueryParameters .get (key ));
353+ }
354+ });
355+ });
356+ }
357+
358+ private void addDefaultRequestHeaders (Map <String , Collection <String >> defaultRequestHeaders ,
340359 Feign .Builder builder ) {
341- Map <String , Collection <String >> defaultRequestHeaders = config .getDefaultRequestHeaders ();
342- if (Objects .nonNull (defaultRequestHeaders )) {
343- builder .requestInterceptor (requestTemplate -> {
344- Map <String , Collection <String >> headers = requestTemplate .headers ();
345- defaultRequestHeaders .keySet ().forEach (key -> {
346- if (!headers .containsKey (key )) {
347- requestTemplate .header (key , defaultRequestHeaders .get (key ));
348- }
349- });
360+ builder .requestInterceptor (requestTemplate -> {
361+ Map <String , Collection <String >> headers = requestTemplate .headers ();
362+ defaultRequestHeaders .keySet ().forEach (key -> {
363+ if (!headers .containsKey (key )) {
364+ requestTemplate .header (key , defaultRequestHeaders .get (key ));
365+ }
350366 });
351- }
367+ });
352368 }
353369
354370 private <T > T getOrInstantiate (Class <T > tClass ) {
0 commit comments