@ -18,6 +18,7 @@ package org.springframework.http.codec.support;
import java.util.ArrayList ;
import java.util.ArrayList ;
import java.util.List ;
import java.util.List ;
import java.util.function.Consumer ;
import org.springframework.core.ResolvableType ;
import org.springframework.core.ResolvableType ;
import org.springframework.core.codec.Decoder ;
import org.springframework.core.codec.Decoder ;
@ -39,6 +40,8 @@ import org.springframework.util.Assert;
* /
* /
abstract class BaseCodecConfigurer implements CodecConfigurer {
abstract class BaseCodecConfigurer implements CodecConfigurer {
protected boolean customCodecsInitialized ;
protected final BaseDefaultCodecs defaultCodecs ;
protected final BaseDefaultCodecs defaultCodecs ;
protected final DefaultCustomCodecs customCodecs ;
protected final DefaultCustomCodecs customCodecs ;
@ -88,6 +91,7 @@ abstract class BaseCodecConfigurer implements CodecConfigurer {
@Override
@Override
public List < HttpMessageReader < ? > > getReaders ( ) {
public List < HttpMessageReader < ? > > getReaders ( ) {
initializeCustomCodecs ( ) ;
List < HttpMessageReader < ? > > result = new ArrayList < > ( ) ;
List < HttpMessageReader < ? > > result = new ArrayList < > ( ) ;
result . addAll ( this . customCodecs . getTypedReaders ( ) ) ;
result . addAll ( this . customCodecs . getTypedReaders ( ) ) ;
@ -113,6 +117,7 @@ abstract class BaseCodecConfigurer implements CodecConfigurer {
* same except for the multipart writer itself .
* same except for the multipart writer itself .
* /
* /
protected List < HttpMessageWriter < ? > > getWritersInternal ( boolean forMultipart ) {
protected List < HttpMessageWriter < ? > > getWritersInternal ( boolean forMultipart ) {
initializeCustomCodecs ( ) ;
List < HttpMessageWriter < ? > > result = new ArrayList < > ( ) ;
List < HttpMessageWriter < ? > > result = new ArrayList < > ( ) ;
result . addAll ( this . customCodecs . getTypedWriters ( ) ) ;
result . addAll ( this . customCodecs . getTypedWriters ( ) ) ;
@ -128,6 +133,13 @@ abstract class BaseCodecConfigurer implements CodecConfigurer {
@Override
@Override
public abstract CodecConfigurer clone ( ) ;
public abstract CodecConfigurer clone ( ) ;
private void initializeCustomCodecs ( ) {
if ( ! this . customCodecsInitialized ) {
this . customCodecs . configConsumers . forEach ( consumer - > consumer . accept ( this . defaultCodecs ) ) ;
this . customCodecsInitialized = true ;
}
}
/ * *
/ * *
* Default implementation of { @code CustomCodecs } .
* Default implementation of { @code CustomCodecs } .
@ -142,6 +154,7 @@ abstract class BaseCodecConfigurer implements CodecConfigurer {
private final List < HttpMessageWriter < ? > > objectWriters = new ArrayList < > ( ) ;
private final List < HttpMessageWriter < ? > > objectWriters = new ArrayList < > ( ) ;
private final List < Consumer < DefaultCodecConfig > > configConsumers = new ArrayList < > ( ) ;
DefaultCustomCodecs ( ) {
DefaultCustomCodecs ( ) {
}
}
@ -179,6 +192,11 @@ abstract class BaseCodecConfigurer implements CodecConfigurer {
( canWriteObject ? this . objectWriters : this . typedWriters ) . add ( writer ) ;
( canWriteObject ? this . objectWriters : this . typedWriters ) . add ( writer ) ;
}
}
@Override
public void withDefaultCodecConfig ( Consumer < DefaultCodecConfig > codecsConfigConsumer ) {
this . configConsumers . add ( codecsConfigConsumer ) ;
}
// Package private accessors...
// Package private accessors...
List < HttpMessageReader < ? > > getTypedReaders ( ) {
List < HttpMessageReader < ? > > getTypedReaders ( ) {