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