@@ -48,6 +48,7 @@ class DefaultWebClientProvider implements WebClientProvider {
48
48
private final HttpHeaders headers ;
49
49
private final @ Nullable String pathPrefix ;
50
50
private final Function <WebClient , WebClient > webClientConfigurer ;
51
+ private final Consumer <WebClient .RequestHeadersSpec <?>> requestConfigurer ;
51
52
52
53
/**
53
54
* Create new {@link DefaultWebClientProvider} with empty {@link HttpHeaders} and no-op {@literal error listener}.
@@ -56,7 +57,7 @@ class DefaultWebClientProvider implements WebClientProvider {
56
57
* @param connector can be {@literal null}.
57
58
*/
58
59
DefaultWebClientProvider (String scheme , @ Nullable ClientHttpConnector connector ) {
59
- this (scheme , connector , e -> {}, HttpHeaders .EMPTY , null , Function .identity ());
60
+ this (scheme , connector , e -> {}, HttpHeaders .EMPTY , null , Function .identity (), requestHeadersSpec -> {} );
60
61
}
61
62
62
63
/**
@@ -66,18 +67,21 @@ class DefaultWebClientProvider implements WebClientProvider {
66
67
* @param connector can be {@literal null}.
67
68
* @param errorListener must not be {@literal null}.
68
69
* @param headers must not be {@literal null}.
69
- * @param pathPrefix can be {@literal null}
70
+ * @param pathPrefix can be {@literal null}.
70
71
* @param webClientConfigurer must not be {@literal null}.
72
+ * @param requestConfigurer must not be {@literal null}.
71
73
*/
72
74
private DefaultWebClientProvider (String scheme , @ Nullable ClientHttpConnector connector ,
73
75
Consumer <Throwable > errorListener , HttpHeaders headers , @ Nullable String pathPrefix ,
74
- Function <WebClient , WebClient > webClientConfigurer ) {
76
+ Function <WebClient , WebClient > webClientConfigurer , Consumer < WebClient . RequestHeadersSpec <?>> requestConfigurer ) {
75
77
76
78
Assert .notNull (scheme , "Scheme must not be null! A common scheme would be 'http'." );
77
79
Assert .notNull (errorListener , "errorListener must not be null! You may want use a no-op one 'e -> {}' instead." );
78
80
Assert .notNull (headers , "headers must not be null! Think about using 'HttpHeaders.EMPTY' as an alternative." );
79
81
Assert .notNull (webClientConfigurer ,
80
82
"webClientConfigurer must not be null! You may want use a no-op one 'Function.identity()' instead." );
83
+ Assert .notNull (requestConfigurer ,
84
+ "requestConfigurer must not be null! You may want use a no-op one 'r -> {}' instead.\" " );
81
85
82
86
this .cachedClients = new ConcurrentHashMap <>();
83
87
this .scheme = scheme ;
@@ -86,6 +90,7 @@ private DefaultWebClientProvider(String scheme, @Nullable ClientHttpConnector co
86
90
this .headers = headers ;
87
91
this .pathPrefix = pathPrefix ;
88
92
this .webClientConfigurer = webClientConfigurer ;
93
+ this .requestConfigurer = requestConfigurer ;
89
94
}
90
95
91
96
@ Override
@@ -106,6 +111,7 @@ public Consumer<Throwable> getErrorListener() {
106
111
return this .errorListener ;
107
112
}
108
113
114
+ @ Nullable
109
115
@ Override
110
116
public String getPathPrefix () {
111
117
return pathPrefix ;
@@ -120,7 +126,17 @@ public WebClientProvider withDefaultHeaders(HttpHeaders headers) {
120
126
merged .addAll (this .headers );
121
127
merged .addAll (headers );
122
128
123
- return new DefaultWebClientProvider (scheme , connector , errorListener , merged , pathPrefix , webClientConfigurer );
129
+ return new DefaultWebClientProvider (scheme , connector , errorListener , merged , pathPrefix , webClientConfigurer ,
130
+ requestConfigurer );
131
+ }
132
+
133
+ @ Override
134
+ public WebClientProvider withRequestConfigurer (Consumer <WebClient .RequestHeadersSpec <?>> requestConfigurer ) {
135
+
136
+ Assert .notNull (requestConfigurer , "requestConfigurer must not be null." );
137
+
138
+ return new DefaultWebClientProvider (scheme , connector , errorListener , headers , pathPrefix , webClientConfigurer ,
139
+ requestConfigurer );
124
140
}
125
141
126
142
@ Override
@@ -129,26 +145,30 @@ public WebClientProvider withErrorListener(Consumer<Throwable> errorListener) {
129
145
Assert .notNull (errorListener , "Error listener must not be null." );
130
146
131
147
Consumer <Throwable > listener = this .errorListener .andThen (errorListener );
132
- return new DefaultWebClientProvider (scheme , this .connector , listener , headers , pathPrefix , webClientConfigurer );
148
+ return new DefaultWebClientProvider (scheme , this .connector , listener , headers , pathPrefix , webClientConfigurer ,
149
+ requestConfigurer );
133
150
}
134
151
135
152
@ Override
136
153
public WebClientProvider withPathPrefix (String pathPrefix ) {
137
154
Assert .notNull (pathPrefix , "pathPrefix must not be null." );
138
155
139
156
return new DefaultWebClientProvider (this .scheme , this .connector , this .errorListener , this .headers , pathPrefix ,
140
- webClientConfigurer );
157
+ webClientConfigurer , requestConfigurer );
141
158
}
142
159
143
160
@ Override
144
161
public WebClientProvider withWebClientConfigurer (Function <WebClient , WebClient > webClientConfigurer ) {
145
- return new DefaultWebClientProvider (scheme , connector , errorListener , headers , pathPrefix , webClientConfigurer );
162
+ return new DefaultWebClientProvider (scheme , connector , errorListener , headers , pathPrefix , webClientConfigurer ,
163
+ requestConfigurer );
146
164
147
165
}
148
166
149
167
protected WebClient createWebClientForSocketAddress (InetSocketAddress socketAddress ) {
150
168
151
- Builder builder = WebClient .builder ().defaultHeaders (it -> it .addAll (getDefaultHeaders ()));
169
+ Builder builder = WebClient .builder () //
170
+ .defaultHeaders (it -> it .addAll (getDefaultHeaders ())) //
171
+ .defaultRequest (requestConfigurer );
152
172
153
173
if (connector != null ) {
154
174
builder = builder .clientConnector (connector );
0 commit comments