From c761919bc9231162a83aeb2b2f5de3f28110b887 Mon Sep 17 00:00:00 2001 From: Olga MaciaszekSharma Date: Thu, 9 Sep 2021 17:59:08 +0200 Subject: [PATCH] Only add default query params and default headers if not already in template. Fixes gh-590. --- .../openfeign/FeignClientFactoryBean.java | 39 +++++++++++++++---- 1 file changed, 32 insertions(+), 7 deletions(-) diff --git a/spring-cloud-openfeign-core/src/main/java/org/springframework/cloud/openfeign/FeignClientFactoryBean.java b/spring-cloud-openfeign-core/src/main/java/org/springframework/cloud/openfeign/FeignClientFactoryBean.java index ef290045..969520c9 100644 --- a/spring-cloud-openfeign-core/src/main/java/org/springframework/cloud/openfeign/FeignClientFactoryBean.java +++ b/spring-cloud-openfeign-core/src/main/java/org/springframework/cloud/openfeign/FeignClientFactoryBean.java @@ -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 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 } } + private void addDefaultQueryParams(FeignClientProperties.FeignClientConfiguration config, Feign.Builder builder) { + Map> defaultQueryParameters = config.getDefaultQueryParameters(); + if (Objects.nonNull(defaultQueryParameters)) { + builder.requestInterceptor(requestTemplate -> { + Map> 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> defaultRequestHeaders = config.getDefaultRequestHeaders(); + if (Objects.nonNull(defaultRequestHeaders)) { + builder.requestInterceptor(requestTemplate -> { + Map> headers = requestTemplate.headers(); + defaultRequestHeaders.keySet().forEach(key -> { + if (!headers.containsKey(key)) { + requestTemplate.header(key, defaultRequestHeaders.get(key)); + } + }); + }); + } + } + private T getOrInstantiate(Class tClass) { try { return beanFactory != null ? beanFactory.getBean(tClass) : applicationContext.getBean(tClass);