22
22
import java .util .ArrayList ;
23
23
import java .util .List ;
24
24
import java .util .Optional ;
25
- import java .util .Set ;
26
25
import java .util .function .Function ;
27
26
import java .util .function .Supplier ;
28
27
@@ -159,7 +158,7 @@ private void applyArguments(HttpRequestValues.Builder requestValues, @Nullable O
159
158
private record HttpRequestValuesInitializer (
160
159
@ Nullable HttpMethod httpMethod , @ Nullable String url ,
161
160
@ Nullable MediaType contentType , @ Nullable List <MediaType > acceptMediaTypes ,
162
- @ Nullable MultiValueMap <String , String > otherHeaders ,
161
+ MultiValueMap <String , String > headers ,
163
162
Supplier <HttpRequestValues .Builder > requestValuesSupplier ) {
164
163
165
164
public HttpRequestValues .Builder initializeRequestValuesBuilder () {
@@ -176,16 +175,8 @@ public HttpRequestValues.Builder initializeRequestValuesBuilder() {
176
175
if (this .acceptMediaTypes != null ) {
177
176
requestValues .setAccept (this .acceptMediaTypes );
178
177
}
179
- if (this .otherHeaders != null ) {
180
- this .otherHeaders .forEach ((name , values ) -> {
181
- if (values .size () == 1 ) {
182
- requestValues .addHeader (name , values .get (0 ));
183
- }
184
- else {
185
- requestValues .addHeader (name , values .toArray (new String [0 ]));
186
- }
187
- });
188
- }
178
+ this .headers .forEach ((name , values ) ->
179
+ values .forEach (value -> requestValues .addHeader (name , value )));
189
180
return requestValues ;
190
181
}
191
182
@@ -216,10 +207,10 @@ public static HttpRequestValuesInitializer create(
216
207
String url = initUrl (typeAnnotation , methodAnnotation , embeddedValueResolver );
217
208
MediaType contentType = initContentType (typeAnnotation , methodAnnotation );
218
209
List <MediaType > acceptableMediaTypes = initAccept (typeAnnotation , methodAnnotation );
219
- MultiValueMap <String , String > headers = initHeaders (typeAnnotation , methodAnnotation ,
220
- embeddedValueResolver );
221
- return new HttpRequestValuesInitializer (httpMethod , url , contentType ,
222
- acceptableMediaTypes , headers , requestValuesSupplier );
210
+ MultiValueMap <String , String > headers = initHeaders (typeAnnotation , methodAnnotation , embeddedValueResolver );
211
+
212
+ return new HttpRequestValuesInitializer (
213
+ httpMethod , url , contentType , acceptableMediaTypes , headers , requestValuesSupplier );
223
214
}
224
215
225
216
private static @ Nullable HttpMethod initHttpMethod (@ Nullable HttpExchange typeAnnotation , HttpExchange methodAnnotation ) {
@@ -291,47 +282,42 @@ public static HttpRequestValuesInitializer create(
291
282
return null ;
292
283
}
293
284
294
- private static MultiValueMap <String , String > parseHeaders (String [] headersArray ,
285
+ private static MultiValueMap <String , String > initHeaders (
286
+ @ Nullable HttpExchange typeAnnotation , HttpExchange methodAnnotation ,
295
287
@ Nullable StringValueResolver embeddedValueResolver ) {
288
+
296
289
MultiValueMap <String , String > headers = new LinkedMultiValueMap <>();
297
- for (String h : headersArray ) {
298
- String [] headerPair = StringUtils .split (h , "=" );
299
- if (headerPair != null ) {
300
- String headerName = headerPair [0 ].trim ();
301
- List <String > headerValues = new ArrayList <>();
302
- Set <String > parsedValues = StringUtils .commaDelimitedListToSet (headerPair [1 ]);
303
- for (String headerValue : parsedValues ) {
304
- if (embeddedValueResolver != null ) {
305
- headerValue = embeddedValueResolver .resolveStringValue (headerValue );
306
- }
307
- if (headerValue != null ) {
308
- headerValue = headerValue .trim ();
309
- headerValues .add (headerValue );
310
- }
311
- }
312
- if (!headerValues .isEmpty ()) {
313
- headers .addAll (headerName , headerValues );
314
- }
315
- }
290
+ if (typeAnnotation != null ) {
291
+ addHeaders (typeAnnotation .headers (), embeddedValueResolver , headers );
316
292
}
293
+ addHeaders (methodAnnotation .headers (), embeddedValueResolver , headers );
317
294
return headers ;
318
295
}
319
296
320
- private static @ Nullable MultiValueMap <String , String > initHeaders (@ Nullable HttpExchange typeAnnotation , HttpExchange methodAnnotation ,
321
- @ Nullable StringValueResolver embeddedValueResolver ) {
322
- MultiValueMap <String , String > methodLevelHeaders = parseHeaders (methodAnnotation .headers (),
323
- embeddedValueResolver );
324
- if (!ObjectUtils .isEmpty (methodLevelHeaders )) {
325
- return methodLevelHeaders ;
326
- }
297
+ private static void addHeaders (
298
+ String [] rawValues , @ Nullable StringValueResolver embeddedValueResolver ,
299
+ MultiValueMap <String , String > outputHeaders ) {
327
300
328
- MultiValueMap <String , String > typeLevelHeaders = (typeAnnotation != null ?
329
- parseHeaders (typeAnnotation .headers (), embeddedValueResolver ) : null );
330
- if (!ObjectUtils .isEmpty (typeLevelHeaders )) {
331
- return typeLevelHeaders ;
301
+ for (String rawValue : rawValues ) {
302
+ String [] pair = StringUtils .split (rawValue , "=" );
303
+ if (pair == null ) {
304
+ continue ;
305
+ }
306
+ String name = pair [0 ].trim ();
307
+ List <String > values = new ArrayList <>();
308
+ for (String value : StringUtils .commaDelimitedListToSet (pair [1 ])) {
309
+ if (embeddedValueResolver != null ) {
310
+ value = embeddedValueResolver .resolveStringValue (value );
311
+ }
312
+ if (value != null ) {
313
+ value = value .trim ();
314
+ values .add (value );
315
+ }
316
+ }
317
+ if (!values .isEmpty ()) {
318
+ outputHeaders .addAll (name , values );
319
+ }
332
320
}
333
-
334
- return null ;
335
321
}
336
322
337
323
private static List <AnnotationDescriptor > getAnnotationDescriptors (AnnotatedElement element ) {
0 commit comments