43
43
import org .springframework .http .client .ReactorClientHttpRequestFactory ;
44
44
import org .springframework .http .client .SimpleClientHttpRequestFactory ;
45
45
import org .springframework .http .client .observation .ClientRequestObservationConvention ;
46
- import org .springframework .http .converter .ByteArrayHttpMessageConverter ;
47
46
import org .springframework .http .converter .HttpMessageConverter ;
48
- import org .springframework .http .converter .ResourceHttpMessageConverter ;
49
- import org .springframework .http .converter .StringHttpMessageConverter ;
50
- import org .springframework .http .converter .cbor .JacksonCborHttpMessageConverter ;
51
- import org .springframework .http .converter .cbor .KotlinSerializationCborHttpMessageConverter ;
52
- import org .springframework .http .converter .cbor .MappingJackson2CborHttpMessageConverter ;
53
- import org .springframework .http .converter .feed .AtomFeedHttpMessageConverter ;
54
- import org .springframework .http .converter .feed .RssChannelHttpMessageConverter ;
55
- import org .springframework .http .converter .json .GsonHttpMessageConverter ;
56
- import org .springframework .http .converter .json .JacksonJsonHttpMessageConverter ;
57
- import org .springframework .http .converter .json .JsonbHttpMessageConverter ;
58
- import org .springframework .http .converter .json .KotlinSerializationJsonHttpMessageConverter ;
59
- import org .springframework .http .converter .json .MappingJackson2HttpMessageConverter ;
60
- import org .springframework .http .converter .protobuf .KotlinSerializationProtobufHttpMessageConverter ;
61
- import org .springframework .http .converter .smile .JacksonSmileHttpMessageConverter ;
62
- import org .springframework .http .converter .smile .MappingJackson2SmileHttpMessageConverter ;
63
- import org .springframework .http .converter .support .AllEncompassingFormHttpMessageConverter ;
64
- import org .springframework .http .converter .xml .JacksonXmlHttpMessageConverter ;
65
- import org .springframework .http .converter .xml .Jaxb2RootElementHttpMessageConverter ;
66
- import org .springframework .http .converter .xml .MappingJackson2XmlHttpMessageConverter ;
67
- import org .springframework .http .converter .yaml .JacksonYamlHttpMessageConverter ;
68
- import org .springframework .http .converter .yaml .MappingJackson2YamlHttpMessageConverter ;
47
+ import org .springframework .http .converter .HttpMessageConverters ;
69
48
import org .springframework .util .Assert ;
70
49
import org .springframework .util .ClassUtils ;
71
50
import org .springframework .util .CollectionUtils ;
@@ -95,68 +74,13 @@ final class DefaultRestClientBuilder implements RestClient.Builder {
95
74
96
75
private static final boolean jdkClientPresent ;
97
76
98
- // message factories
99
-
100
- private static final boolean romePresent ;
101
-
102
- private static final boolean jaxb2Present ;
103
-
104
- private static final boolean jacksonPresent ;
105
-
106
- private static final boolean jackson2Present ;
107
-
108
- private static final boolean jacksonXmlPresent ;
109
-
110
- private static final boolean jackson2XmlPresent ;
111
-
112
- private static final boolean jacksonSmilePresent ;
113
-
114
- private static final boolean jackson2SmilePresent ;
115
-
116
- private static final boolean jacksonCborPresent ;
117
-
118
- private static final boolean jackson2CborPresent ;
119
-
120
- private static final boolean jacksonYamlPresent ;
121
-
122
- private static final boolean jackson2YamlPresent ;
123
-
124
- private static final boolean gsonPresent ;
125
-
126
- private static final boolean jsonbPresent ;
127
-
128
- private static final boolean kotlinSerializationCborPresent ;
129
-
130
- private static final boolean kotlinSerializationJsonPresent ;
131
-
132
- private static final boolean kotlinSerializationProtobufPresent ;
133
-
134
77
static {
135
78
ClassLoader loader = DefaultRestClientBuilder .class .getClassLoader ();
136
79
137
80
httpComponentsClientPresent = ClassUtils .isPresent ("org.apache.hc.client5.http.classic.HttpClient" , loader );
138
81
jettyClientPresent = ClassUtils .isPresent ("org.eclipse.jetty.client.HttpClient" , loader );
139
82
reactorNettyClientPresent = ClassUtils .isPresent ("reactor.netty.http.client.HttpClient" , loader );
140
83
jdkClientPresent = ClassUtils .isPresent ("java.net.http.HttpClient" , loader );
141
-
142
- romePresent = ClassUtils .isPresent ("com.rometools.rome.feed.WireFeed" , loader );
143
- jaxb2Present = ClassUtils .isPresent ("jakarta.xml.bind.Binder" , loader );
144
- jacksonPresent = ClassUtils .isPresent ("tools.jackson.databind.ObjectMapper" , loader );
145
- jackson2Present = ClassUtils .isPresent ("com.fasterxml.jackson.databind.ObjectMapper" , loader ) &&
146
- ClassUtils .isPresent ("com.fasterxml.jackson.core.JsonGenerator" , loader );
147
- jacksonXmlPresent = jacksonPresent && ClassUtils .isPresent ("tools.jackson.dataformat.xml.XmlMapper" , loader );
148
- jackson2XmlPresent = jackson2Present && ClassUtils .isPresent ("com.fasterxml.jackson.dataformat.xml.XmlMapper" , loader );
149
- jacksonSmilePresent = jacksonPresent && ClassUtils .isPresent ("tools.jackson.dataformat.smile.SmileMapper" , loader );
150
- jackson2SmilePresent = jackson2Present && ClassUtils .isPresent ("com.fasterxml.jackson.dataformat.smile.SmileFactory" , loader );
151
- jacksonCborPresent = jacksonPresent && ClassUtils .isPresent ("tools.jackson.dataformat.cbor.CBORMapper" , loader );
152
- jackson2CborPresent = jackson2Present && ClassUtils .isPresent ("com.fasterxml.jackson.dataformat.cbor.CBORFactory" , loader );
153
- jacksonYamlPresent = jacksonPresent && ClassUtils .isPresent ("tools.jackson.dataformat.yaml.YAMLMapper" , loader );
154
- jackson2YamlPresent = jackson2Present && ClassUtils .isPresent ("com.fasterxml.jackson.dataformat.yaml.YAMLFactory" , loader );
155
- gsonPresent = ClassUtils .isPresent ("com.google.gson.Gson" , loader );
156
- jsonbPresent = ClassUtils .isPresent ("jakarta.json.bind.Jsonb" , loader );
157
- kotlinSerializationCborPresent = ClassUtils .isPresent ("kotlinx.serialization.cbor.Cbor" , loader );
158
- kotlinSerializationJsonPresent = ClassUtils .isPresent ("kotlinx.serialization.json.Json" , loader );
159
- kotlinSerializationProtobufPresent = ClassUtils .isPresent ("kotlinx.serialization.protobuf.ProtoBuf" , loader );
160
84
}
161
85
162
86
private @ Nullable String baseUrl ;
@@ -444,9 +368,11 @@ public RestClient.Builder messageConverters(Consumer<List<HttpMessageConverter<?
444
368
}
445
369
446
370
@ Override
447
- public RestClient .Builder messageConverters (List <HttpMessageConverter <?>> messageConverters ) {
371
+ public RestClient .Builder messageConverters (Iterable <HttpMessageConverter <?>> messageConverters ) {
448
372
validateConverters (messageConverters );
449
- this .messageConverters = Collections .unmodifiableList (messageConverters );
373
+ List <HttpMessageConverter <?>> converters = new ArrayList <>();
374
+ messageConverters .forEach (converter -> converters .add (converter ));
375
+ this .messageConverters = Collections .unmodifiableList (converters );
450
376
return this ;
451
377
}
452
378
@@ -473,77 +399,16 @@ public RestClient.Builder apply(Consumer<RestClient.Builder> builderConsumer) {
473
399
private List <HttpMessageConverter <?>> initMessageConverters () {
474
400
if (this .messageConverters == null ) {
475
401
this .messageConverters = new ArrayList <>();
476
-
477
- this .messageConverters .add (new ByteArrayHttpMessageConverter ());
478
- this .messageConverters .add (new StringHttpMessageConverter ());
479
- this .messageConverters .add (new ResourceHttpMessageConverter (false ));
480
- this .messageConverters .add (new AllEncompassingFormHttpMessageConverter ());
481
-
482
- if (romePresent ) {
483
- this .messageConverters .add (new AtomFeedHttpMessageConverter ());
484
- this .messageConverters .add (new RssChannelHttpMessageConverter ());
485
- }
486
-
487
- if (jacksonXmlPresent ) {
488
- this .messageConverters .add (new JacksonXmlHttpMessageConverter ());
489
- }
490
- else if (jackson2XmlPresent ) {
491
- this .messageConverters .add (new MappingJackson2XmlHttpMessageConverter ());
492
- }
493
- else if (jaxb2Present ) {
494
- this .messageConverters .add (new Jaxb2RootElementHttpMessageConverter ());
495
- }
496
-
497
- if (kotlinSerializationProtobufPresent ) {
498
- this .messageConverters .add (new KotlinSerializationProtobufHttpMessageConverter ());
499
- }
500
-
501
- if (jacksonPresent ) {
502
- this .messageConverters .add (new JacksonJsonHttpMessageConverter ());
503
- }
504
- else if (jackson2Present ) {
505
- this .messageConverters .add (new MappingJackson2HttpMessageConverter ());
506
- }
507
- else if (gsonPresent ) {
508
- this .messageConverters .add (new GsonHttpMessageConverter ());
509
- }
510
- else if (jsonbPresent ) {
511
- this .messageConverters .add (new JsonbHttpMessageConverter ());
512
- }
513
- else if (kotlinSerializationJsonPresent ) {
514
- this .messageConverters .add (new KotlinSerializationJsonHttpMessageConverter ());
515
- }
516
-
517
- if (jacksonSmilePresent ) {
518
- this .messageConverters .add (new JacksonSmileHttpMessageConverter ());
519
- }
520
- if (jackson2SmilePresent ) {
521
- this .messageConverters .add (new MappingJackson2SmileHttpMessageConverter ());
522
- }
523
-
524
- if (jacksonCborPresent ) {
525
- this .messageConverters .add (new JacksonCborHttpMessageConverter ());
526
- }
527
- else if (jackson2CborPresent ) {
528
- this .messageConverters .add (new MappingJackson2CborHttpMessageConverter ());
529
- }
530
- else if (kotlinSerializationCborPresent ) {
531
- this .messageConverters .add (new KotlinSerializationCborHttpMessageConverter ());
532
- }
533
-
534
- if (jacksonYamlPresent ) {
535
- this .messageConverters .add (new JacksonYamlHttpMessageConverter ());
536
- }
537
- else if (jackson2YamlPresent ) {
538
- this .messageConverters .add (new MappingJackson2YamlHttpMessageConverter ());
539
- }
402
+ HttpMessageConverters .withDefaults ().build ().forClient ().forEach (this .messageConverters ::add );
540
403
}
541
404
return this .messageConverters ;
542
405
}
543
406
544
- private void validateConverters (@ Nullable List <HttpMessageConverter <?>> messageConverters ) {
545
- Assert .notEmpty (messageConverters , "At least one HttpMessageConverter is required" );
546
- Assert .noNullElements (messageConverters , "The HttpMessageConverter list must not contain null elements" );
407
+ private void validateConverters (@ Nullable Iterable <HttpMessageConverter <?>> messageConverters ) {
408
+ Assert .notNull (messageConverters , "At least one HttpMessageConverter is required" );
409
+ Assert .isTrue (messageConverters .iterator ().hasNext (), "At least one HttpMessageConverter is required" );
410
+ messageConverters .forEach (converter ->
411
+ Assert .notNull (converter , "The HttpMessageConverter list must not contain null elements" ));
547
412
}
548
413
549
414
0 commit comments