Override default request headers and query param from default client config with specific client config. Fixes gh-715.
This commit is contained in:
@@ -18,6 +18,7 @@ package org.springframework.cloud.openfeign;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
@@ -72,7 +73,7 @@ import org.springframework.util.StringUtils;
|
||||
* @author Hyeonmin Park
|
||||
* @author Felix Dittrich
|
||||
* @author Dominique Villard
|
||||
* @athor Can Bezmen
|
||||
* @author Can Bezmen
|
||||
*/
|
||||
public class FeignClientFactoryBean
|
||||
implements FactoryBean<Object>, InitializingBean, ApplicationContextAware, BeanFactoryAware {
|
||||
@@ -178,6 +179,8 @@ public class FeignClientFactoryBean
|
||||
configureUsingProperties(properties.getConfig().get(contextId), builder);
|
||||
configureUsingConfiguration(context, builder);
|
||||
}
|
||||
configureDefaultRequestElements(properties.getConfig().get(properties.getDefaultConfig()),
|
||||
properties.getConfig().get(contextId), builder);
|
||||
}
|
||||
else {
|
||||
configureUsingConfiguration(context, builder);
|
||||
@@ -298,9 +301,6 @@ public class FeignClientFactoryBean
|
||||
builder.encoder(getOrInstantiate(config.getEncoder()));
|
||||
}
|
||||
|
||||
addDefaultRequestHeaders(config, builder);
|
||||
addDefaultQueryParams(config, builder);
|
||||
|
||||
if (Objects.nonNull(config.getDecoder())) {
|
||||
builder.decoder(getOrInstantiate(config.getDecoder()));
|
||||
}
|
||||
@@ -322,33 +322,49 @@ 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));
|
||||
}
|
||||
});
|
||||
});
|
||||
protected void configureDefaultRequestElements(FeignClientProperties.FeignClientConfiguration defaultConfig,
|
||||
FeignClientProperties.FeignClientConfiguration clientConfig, Feign.Builder builder) {
|
||||
Map<String, Collection<String>> defaultRequestHeaders = defaultConfig != null
|
||||
? defaultConfig.getDefaultRequestHeaders() : new HashMap<>();
|
||||
if (clientConfig != null) {
|
||||
defaultRequestHeaders.putAll(clientConfig.getDefaultRequestHeaders());
|
||||
}
|
||||
if (!defaultRequestHeaders.isEmpty()) {
|
||||
addDefaultRequestHeaders(defaultRequestHeaders, builder);
|
||||
}
|
||||
|
||||
Map<String, Collection<String>> defaultQueryParameters = defaultConfig != null
|
||||
? defaultConfig.getDefaultQueryParameters() : new HashMap<>();
|
||||
if (clientConfig != null) {
|
||||
defaultQueryParameters.putAll(clientConfig.getDefaultQueryParameters());
|
||||
}
|
||||
if (!defaultQueryParameters.isEmpty()) {
|
||||
addDefaultQueryParams(defaultQueryParameters, builder);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
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 void addDefaultQueryParams(Map<String, Collection<String>> defaultQueryParameters, Feign.Builder builder) {
|
||||
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(Map<String, Collection<String>> defaultRequestHeaders,
|
||||
Feign.Builder builder) {
|
||||
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) {
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2013-2022 the original author or authors.
|
||||
* Copyright 2013-2023 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -130,9 +130,9 @@ public class FeignClientProperties {
|
||||
|
||||
private Class<ResponseInterceptor> responseInterceptor;
|
||||
|
||||
private Map<String, Collection<String>> defaultRequestHeaders;
|
||||
private Map<String, Collection<String>> defaultRequestHeaders = new HashMap<>();
|
||||
|
||||
private Map<String, Collection<String>> defaultQueryParameters;
|
||||
private Map<String, Collection<String>> defaultQueryParameters = new HashMap<>();
|
||||
|
||||
private Boolean dismiss404;
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2021-2022 the original author or authors.
|
||||
* Copyright 2021-2023 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -62,8 +62,8 @@ class FeignClientConfigurationTests {
|
||||
assertThat(config.getErrorDecoder()).isNull();
|
||||
assertThat(config.getRequestInterceptors()).isNull();
|
||||
assertThat(config.getResponseInterceptor()).isNull();
|
||||
assertThat(config.getDefaultRequestHeaders()).isNull();
|
||||
assertThat(config.getDefaultQueryParameters()).isNull();
|
||||
assertThat(config.getDefaultRequestHeaders()).isEmpty();
|
||||
assertThat(config.getDefaultQueryParameters()).isEmpty();
|
||||
assertThat(config.getDismiss404()).isNull();
|
||||
assertThat(config.getDecoder()).isNull();
|
||||
assertThat(config.getEncoder()).isNull();
|
||||
|
||||
Reference in New Issue
Block a user