18
18
19
19
import java .util .ArrayList ;
20
20
import java .util .List ;
21
+ import java .util .function .Consumer ;
21
22
22
23
import org .springframework .core .ResolvableType ;
23
24
import org .springframework .core .codec .Decoder ;
39
40
*/
40
41
abstract class BaseCodecConfigurer implements CodecConfigurer {
41
42
43
+ protected boolean customCodecsInitialized ;
44
+
42
45
protected final BaseDefaultCodecs defaultCodecs ;
43
46
44
47
protected final DefaultCustomCodecs customCodecs ;
@@ -88,6 +91,7 @@ public CustomCodecs customCodecs() {
88
91
89
92
@ Override
90
93
public List <HttpMessageReader <?>> getReaders () {
94
+ initializeCustomCodecs ();
91
95
List <HttpMessageReader <?>> result = new ArrayList <>();
92
96
93
97
result .addAll (this .defaultCodecs .getTypedReaders ());
@@ -113,6 +117,7 @@ public List<HttpMessageWriter<?>> getWriters() {
113
117
* same except for the multipart writer itself.
114
118
*/
115
119
protected List <HttpMessageWriter <?>> getWritersInternal (boolean forMultipart ) {
120
+ initializeCustomCodecs ();
116
121
List <HttpMessageWriter <?>> result = new ArrayList <>();
117
122
118
123
result .addAll (this .defaultCodecs .getTypedWriters (forMultipart ));
@@ -128,6 +133,13 @@ protected List<HttpMessageWriter<?>> getWritersInternal(boolean forMultipart) {
128
133
@ Override
129
134
public abstract CodecConfigurer clone ();
130
135
136
+ private void initializeCustomCodecs () {
137
+ if (!this .customCodecsInitialized ) {
138
+ this .customCodecs .configConsumers .forEach (consumer -> consumer .accept (this .defaultCodecs ));
139
+ this .customCodecsInitialized = true ;
140
+ }
141
+ }
142
+
131
143
132
144
/**
133
145
* Default implementation of {@code CustomCodecs}.
@@ -142,6 +154,7 @@ protected static final class DefaultCustomCodecs implements CustomCodecs {
142
154
143
155
private final List <HttpMessageWriter <?>> objectWriters = new ArrayList <>();
144
156
157
+ private final List <Consumer <DefaultCodecConfig >> configConsumers = new ArrayList <>();
145
158
146
159
DefaultCustomCodecs () {
147
160
}
@@ -179,6 +192,10 @@ public void writer(HttpMessageWriter<?> writer) {
179
192
(canWriteObject ? this .objectWriters : this .typedWriters ).add (writer );
180
193
}
181
194
195
+ @ Override
196
+ public void withDefaultCodecConfig (Consumer <DefaultCodecConfig > codecsConfigConsumer ) {
197
+ this .configConsumers .add (codecsConfigConsumer );
198
+ }
182
199
183
200
// Package private accessors...
184
201
0 commit comments