diff --git a/spring-web/src/main/java/org/springframework/http/codec/AbstractCodecConfigurer.java b/spring-web/src/main/java/org/springframework/http/codec/AbstractCodecConfigurer.java index b71fb7b8fd..ed1eebf5b8 100644 --- a/spring-web/src/main/java/org/springframework/http/codec/AbstractCodecConfigurer.java +++ b/spring-web/src/main/java/org/springframework/http/codec/AbstractCodecConfigurer.java @@ -16,10 +16,8 @@ package org.springframework.http.codec; import java.util.ArrayList; -import java.util.HashMap; +import java.util.Collections; import java.util.List; -import java.util.Map; -import java.util.function.Supplier; import org.springframework.core.ResolvableType; import org.springframework.core.codec.ByteArrayDecoder; @@ -32,6 +30,7 @@ import org.springframework.core.codec.DataBufferEncoder; import org.springframework.core.codec.Decoder; import org.springframework.core.codec.Encoder; import org.springframework.core.codec.ResourceDecoder; +import org.springframework.core.codec.StringDecoder; import org.springframework.http.codec.json.Jackson2JsonDecoder; import org.springframework.http.codec.json.Jackson2JsonEncoder; import org.springframework.http.codec.xml.Jaxb2XmlDecoder; @@ -39,6 +38,7 @@ import org.springframework.http.codec.xml.Jaxb2XmlEncoder; import org.springframework.util.Assert; import org.springframework.util.ClassUtils; + /** * Default implementation of {@link CodecConfigurer}. * @@ -62,9 +62,6 @@ abstract class AbstractCodecConfigurer implements CodecConfigurer { private final DefaultCustomCodecs customCodecs = new DefaultCustomCodecs(); - /** - * Protected constructor with the configurer for default readers and writers. - */ protected AbstractCodecConfigurer(AbstractDefaultCodecs defaultCodecs) { Assert.notNull(defaultCodecs, "'defaultCodecs' is required."); this.defaultCodecs = defaultCodecs; @@ -77,8 +74,8 @@ abstract class AbstractCodecConfigurer implements CodecConfigurer { } @Override - public void registerDefaults(boolean registerDefaults) { - this.defaultCodecs.setSuppressed(!registerDefaults); + public void registerDefaults(boolean shouldRegister) { + this.defaultCodecs.setRegisterDefaults(shouldRegister); } @Override @@ -86,197 +83,156 @@ abstract class AbstractCodecConfigurer implements CodecConfigurer { return this.customCodecs; } - @Override public List> getReaders() { List> result = new ArrayList<>(); - this.defaultCodecs.addTypedReadersTo(result); - this.customCodecs.addTypedReadersTo(result); + result.addAll(this.defaultCodecs.getTypedReaders()); + result.addAll(this.customCodecs.getTypedReaders()); - this.defaultCodecs.addObjectReadersTo(result); - this.customCodecs.addObjectReadersTo(result); + result.addAll(this.defaultCodecs.getObjectReaders()); + result.addAll(this.customCodecs.getObjectReaders()); - // String + "*/*" - this.defaultCodecs.addStringReaderTo(result); + result.addAll(this.defaultCodecs.getCatchAllReaders()); return result; } - /** - * Prepare a list of HTTP message writers. - */ @Override public List> getWriters() { - List> result = new ArrayList<>(); - this.defaultCodecs.addTypedWritersTo(result); - this.customCodecs.addTypedWritersTo(result); + result.addAll(this.defaultCodecs.getTypedWriters()); + result.addAll(this.customCodecs.getTypedWriters()); - this.defaultCodecs.addObjectWritersTo(result); - this.customCodecs.addObjectWritersTo(result); + result.addAll(this.defaultCodecs.getObjectWriters()); + result.addAll(this.customCodecs.getObjectWriters()); - // String + "*/*" - this.defaultCodecs.addStringWriterTo(result); + result.addAll(this.defaultCodecs.getCatchAllWriters()); return result; } - /** - * Default implementation for {@link DefaultCodecs}. - */ abstract static class AbstractDefaultCodecs implements DefaultCodecs { - private boolean suppressed = false; + private boolean registerDefaults = true; - private final Map, HttpMessageReader> readers = new HashMap<>(); + private Jackson2JsonDecoder jackson2Decoder; - private final Map, HttpMessageWriter> writers = new HashMap<>(); + private Jackson2JsonEncoder jackson2Encoder; + + + public void setRegisterDefaults(boolean registerDefaults) { + this.registerDefaults = registerDefaults; + } + + public boolean shouldRegisterDefaults() { + return this.registerDefaults; + } @Override public void jackson2Decoder(Jackson2JsonDecoder decoder) { - this.readers.put(Jackson2JsonDecoder.class, new DecoderHttpMessageReader<>(decoder)); + this.jackson2Decoder = decoder; + } + + protected Jackson2JsonDecoder jackson2Decoder() { + return this.jackson2Decoder != null ? this.jackson2Decoder : new Jackson2JsonDecoder(); } @Override public void jackson2Encoder(Jackson2JsonEncoder encoder) { - this.writers.put(Jackson2JsonEncoder.class, new EncoderHttpMessageWriter<>(encoder)); + this.jackson2Encoder = encoder; } - public void addTypedReadersTo(List> result) { - addReaderTo(result, ByteArrayDecoder.class, ByteArrayDecoder::new); - addReaderTo(result, ByteBufferDecoder.class, ByteBufferDecoder::new); - addReaderTo(result, DataBufferDecoder.class, DataBufferDecoder::new); - addReaderTo(result, ResourceDecoder.class, ResourceDecoder::new); - addStringReaderTextOnlyTo(result); + protected Jackson2JsonEncoder jackson2Encoder() { + return this.jackson2Encoder != null ? this.jackson2Encoder : new Jackson2JsonEncoder(); } - protected void addTypedWritersTo(List> result) { - addWriterTo(result, ByteArrayEncoder.class, ByteArrayEncoder::new); - addWriterTo(result, ByteBufferEncoder.class, ByteBufferEncoder::new); - addWriterTo(result, DataBufferEncoder.class, DataBufferEncoder::new); - addWriterTo(result, ResourceHttpMessageWriter::new); - addStringWriterTextPlainOnlyTo(result); + // Readers... + + public List> getTypedReaders() { + if (!this.registerDefaults) { + return Collections.emptyList(); + } + List> result = new ArrayList<>(); + result.add(new DecoderHttpMessageReader<>(new ByteArrayDecoder())); + result.add(new DecoderHttpMessageReader<>(new ByteBufferDecoder())); + result.add(new DecoderHttpMessageReader<>(new DataBufferDecoder())); + result.add(new DecoderHttpMessageReader<>(new ResourceDecoder())); + result.add(new DecoderHttpMessageReader<>(StringDecoder.textPlainOnly(splitTextOnNewLine()))); + return result; } + protected abstract boolean splitTextOnNewLine(); - protected void addObjectReadersTo(List> result) { + public List> getObjectReaders() { + if (!this.registerDefaults) { + return Collections.emptyList(); + } + List> result = new ArrayList<>(); if (jaxb2Present) { - addReaderTo(result, Jaxb2XmlDecoder.class, Jaxb2XmlDecoder::new); + result.add(new DecoderHttpMessageReader<>(new Jaxb2XmlDecoder())); } if (jackson2Present) { - addReaderTo(result, Jackson2JsonDecoder.class, Jackson2JsonDecoder::new); + result.add(new DecoderHttpMessageReader<>(jackson2Decoder())); } + return result; } - protected void addObjectWritersTo(List> result) { + public List> getCatchAllReaders() { + if (!this.registerDefaults) { + return Collections.emptyList(); + } + List> result = new ArrayList<>(); + result.add(new DecoderHttpMessageReader<>(StringDecoder.allMimeTypes(splitTextOnNewLine()))); + return result; + } + + // Writers... + + public List> getTypedWriters() { + if (!this.registerDefaults) { + return Collections.emptyList(); + } + List> result = new ArrayList<>(); + result.add(new EncoderHttpMessageWriter<>(new ByteArrayEncoder())); + result.add(new EncoderHttpMessageWriter<>(new ByteBufferEncoder())); + result.add(new EncoderHttpMessageWriter<>(new DataBufferEncoder())); + result.add(new ResourceHttpMessageWriter()); + result.add(new EncoderHttpMessageWriter<>(CharSequenceEncoder.textPlainOnly())); + return result; + } + + public List> getObjectWriters() { + if (!this.registerDefaults) { + return Collections.emptyList(); + } + List> result = new ArrayList<>(); if (jaxb2Present) { - addWriterTo(result, Jaxb2XmlEncoder.class, Jaxb2XmlEncoder::new); + result.add(new EncoderHttpMessageWriter<>(new Jaxb2XmlEncoder())); } if (jackson2Present) { - addWriterTo(result, Jackson2JsonEncoder.class, Jackson2JsonEncoder::new); + result.add(new EncoderHttpMessageWriter<>(jackson2Encoder())); } + return result; } - - // Accessors for internal use... - - - protected Map, HttpMessageReader> getReaders() { - return this.readers; - } - - protected Map, HttpMessageWriter> getWriters() { - return this.writers; - } - - private void setSuppressed(boolean suppressed) { - this.suppressed = suppressed; - } - - - // Protected methods for building a list of default readers or writers... - - - protected > void addReaderTo(List> result, - Class key, Supplier fallback) { - - addReaderTo(result, () -> findDecoderReader(key, fallback)); - } - - protected void addReaderTo(List> result, - Supplier> reader) { - - if (!this.suppressed) { - result.add(reader.get()); + public List> getCatchAllWriters() { + if (!this.registerDefaults) { + return Collections.emptyList(); } - } - - protected > DecoderHttpMessageReader findDecoderReader( - Class decoderType, Supplier fallback) { - - DecoderHttpMessageReader reader = (DecoderHttpMessageReader) this.readers.get(decoderType); - return reader != null ? reader : new DecoderHttpMessageReader<>(fallback.get()); - } - - @SuppressWarnings("unchecked") - protected HttpMessageReader findReader(Class key, Supplier> fallback) { - return this.readers.containsKey(key) ? this.readers.get(key) : fallback.get(); - } - - - protected > void addWriterTo(List> result, - Class key, Supplier fallback) { - - addWriterTo(result, () -> findEncoderWriter(key, fallback)); - } - - protected void addWriterTo(List> result, - Supplier> writer) { - - if (!this.suppressed) { - result.add(writer.get()); - } - } - - protected > EncoderHttpMessageWriter findEncoderWriter( - Class encoderType, Supplier fallback) { - - EncoderHttpMessageWriter writer = (EncoderHttpMessageWriter) this.writers.get(encoderType); - return writer != null ? writer : new EncoderHttpMessageWriter<>(fallback.get()); - } - - @SuppressWarnings("unchecked") - protected HttpMessageWriter findWriter(Class key, Supplier> fallback) { - return this.writers.containsKey(key) ? this.writers.get(key) : fallback.get(); - } - - - protected abstract void addStringReaderTextOnlyTo(List> result); - - protected abstract void addStringReaderTo(List> result); - - protected void addStringWriterTextPlainOnlyTo(List> result) { - addWriterTo(result, () -> new EncoderHttpMessageWriter<>(CharSequenceEncoder.textPlainOnly())); - } - - protected void addStringWriterTo(List> result) { - addWriterTo(result, () -> new EncoderHttpMessageWriter<>(CharSequenceEncoder.allMimeTypes())); + List> result = new ArrayList<>(); + result.add(new EncoderHttpMessageWriter<>(CharSequenceEncoder.allMimeTypes())); + return result; } } - /** - * Default implementation of CustomCodecs. - */ private static class DefaultCustomCodecs implements CustomCodecs { private final List> typedReaders = new ArrayList<>(); - private final List> typedWriters = new ArrayList<>(); private final List> objectReaders = new ArrayList<>(); - private final List> objectWriters = new ArrayList<>(); @@ -302,22 +258,22 @@ abstract class AbstractCodecConfigurer implements CodecConfigurer { (canWriteObject ? this.objectWriters : this.typedWriters).add(writer); } - // Internal methods for building a list of custom readers or writers... - protected void addTypedReadersTo(List> result) { - result.addAll(this.typedReaders); + public List> getTypedReaders() { + return this.typedReaders; } - protected void addObjectReadersTo(List> result) { - result.addAll(this.objectReaders); + public List> getTypedWriters() { + return this.typedWriters; } - protected void addTypedWritersTo(List> result) { - result.addAll(this.typedWriters); + public List> getObjectReaders() { + return this.objectReaders; } - protected void addObjectWritersTo(List> result) { - result.addAll(this.objectWriters); + public List> getObjectWriters() { + return this.objectWriters; } } + } diff --git a/spring-web/src/main/java/org/springframework/http/codec/ClientCodecConfigurer.java b/spring-web/src/main/java/org/springframework/http/codec/ClientCodecConfigurer.java index ac04d4e340..375d0bccd6 100644 --- a/spring-web/src/main/java/org/springframework/http/codec/ClientCodecConfigurer.java +++ b/spring-web/src/main/java/org/springframework/http/codec/ClientCodecConfigurer.java @@ -35,10 +35,7 @@ import org.springframework.core.codec.Encoder; */ public interface ClientCodecConfigurer extends CodecConfigurer { - /** - * {@inheritDoc} - *

Overriden to return {@link ClientDefaultCodecs}. - */ + @Override ClientDefaultCodecs defaultCodecs(); @@ -51,8 +48,9 @@ public interface ClientCodecConfigurer extends CodecConfigurer { return new DefaultClientCodecConfigurer(); } + /** - * Extension of {@link AbstractCodecConfigurer} with extra client options. + * Extension of {@link DefaultCodecs} with extra client options. */ interface ClientDefaultCodecs extends DefaultCodecs { @@ -65,7 +63,9 @@ public interface ClientCodecConfigurer extends CodecConfigurer { /** * Configure the {@code Decoder} to use for Server-Sent Events. - *

By default the {@link #jackson2Decoder} override is used for SSE. + *

By default if this is not set, and Jackson is available, the + * {@link #jackson2Decoder} override is used instead. Use this property + * if you want to further customize the SSE decoder. * @param decoder the decoder to use */ void serverSentEventDecoder(Decoder decoder); diff --git a/spring-web/src/main/java/org/springframework/http/codec/CodecConfigurer.java b/spring-web/src/main/java/org/springframework/http/codec/CodecConfigurer.java index 3e6cb523d0..d7624adb49 100644 --- a/spring-web/src/main/java/org/springframework/http/codec/CodecConfigurer.java +++ b/spring-web/src/main/java/org/springframework/http/codec/CodecConfigurer.java @@ -35,48 +35,50 @@ import org.springframework.http.codec.json.Jackson2JsonEncoder; public interface CodecConfigurer { /** - * Provide overrides for built-in HTTP message readers or writers. + * Configure or customize the default HTTP message readers and writers. */ DefaultCodecs defaultCodecs(); /** - * Whether to make default HTTP message reader and writer registrations. - *

By default this is set to {@code "true"}. + * Whether to register default HTTP message readers and writers. + *

By default this is set to {@code "true"}; setting this to {@code false} + * disables default HTTP message reader and writer registrations. */ void registerDefaults(boolean registerDefaults); /** - * Register a custom encoder or decoder. + * Register custom HTTP message readers or writers to use in addition to + * the ones registered by default. */ CustomCodecs customCodecs(); /** - * Prepare a list of HTTP message readers. + * Obtain the configured HTTP message readers. */ List> getReaders(); /** - * Prepare a list of HTTP message writers. + * Obtain the configured HTTP message writers. */ List> getWriters(); /** - * Registry and container for built-in HTTP message readers and writers. + * Assists with customizing the default HTTP message readers and writers. * @see ClientCodecConfigurer.ClientDefaultCodecs * @see ServerCodecConfigurer.ServerDefaultCodecs */ interface DefaultCodecs { /** - * Override the default Jackson {@code Decoder}. - * @param decoder the decoder to use + * Override the default Jackson JSON {@code Decoder}. + * @param decoder the decoder instance to use */ void jackson2Decoder(Jackson2JsonDecoder decoder); /** - * Override the default Jackson {@code Encoder} for JSON. - * @param encoder the encoder to use + * Override the default Jackson JSON {@code Encoder}. + * @param encoder the encoder instance to use */ void jackson2Encoder(Jackson2JsonEncoder encoder); diff --git a/spring-web/src/main/java/org/springframework/http/codec/DefaultClientCodecConfigurer.java b/spring-web/src/main/java/org/springframework/http/codec/DefaultClientCodecConfigurer.java index 0eedbeedb4..7863f6e4da 100644 --- a/spring-web/src/main/java/org/springframework/http/codec/DefaultClientCodecConfigurer.java +++ b/spring-web/src/main/java/org/springframework/http/codec/DefaultClientCodecConfigurer.java @@ -17,12 +17,11 @@ package org.springframework.http.codec; import java.util.ArrayList; +import java.util.Collections; import java.util.List; import org.springframework.core.codec.Decoder; import org.springframework.core.codec.Encoder; -import org.springframework.core.codec.StringDecoder; -import org.springframework.http.codec.json.Jackson2JsonDecoder; import org.springframework.http.codec.multipart.MultipartHttpMessageWriter; /** @@ -45,14 +44,13 @@ class DefaultClientCodecConfigurer extends AbstractCodecConfigurer implements Cl } - /** - * Default implementation of {@link ClientDefaultCodecs}. - */ private static class ClientDefaultCodecsImpl extends AbstractDefaultCodecs implements ClientDefaultCodecs { private DefaultMultipartCodecs multipartCodecs; + private Decoder sseDecoder; + @Override public MultipartCodecs multipartCodecs() { @@ -64,47 +62,47 @@ class DefaultClientCodecConfigurer extends AbstractCodecConfigurer implements Cl @Override public void serverSentEventDecoder(Decoder decoder) { - HttpMessageReader reader = new ServerSentEventHttpMessageReader(decoder); - getReaders().put(ServerSentEventHttpMessageReader.class, reader); + this.sseDecoder = decoder; + } + + + @Override + protected boolean splitTextOnNewLine() { + return false; } @Override - protected void addTypedWritersTo(List> result) { - super.addTypedWritersTo(result); - addWriterTo(result, FormHttpMessageWriter::new); - addWriterTo(result, () -> findWriter(MultipartHttpMessageWriter.class, - () -> this.multipartCodecs != null ? - new MultipartHttpMessageWriter(this.multipartCodecs.getWriters()) : - new MultipartHttpMessageWriter())); + public List> getObjectReaders() { + if (!shouldRegisterDefaults()) { + return Collections.emptyList(); + } + List> result = super.getObjectReaders(); + result.add(new ServerSentEventHttpMessageReader(getSseDecoder())); + return result; + } + + private Decoder getSseDecoder() { + if (this.sseDecoder != null) { + return this.sseDecoder; + } + return jackson2Present ? jackson2Decoder() : null; } @Override - protected void addObjectReadersTo(List> result) { - super.addObjectReadersTo(result); - addServerSentEventReaderTo(result); + public List> getTypedWriters() { + if (!this.shouldRegisterDefaults()) { + return Collections.emptyList(); + } + List> result = super.getTypedWriters(); + result.add(new FormHttpMessageWriter()); + result.add(getMultipartHttpMessageWriter()); + return result; } - private void addServerSentEventReaderTo(List> result) { - addReaderTo(result, () -> findReader(ServerSentEventHttpMessageReader.class, () -> { - Decoder decoder = null; - if (jackson2Present) { - decoder = findDecoderReader( - Jackson2JsonDecoder.class, Jackson2JsonDecoder::new).getDecoder(); - } - return new ServerSentEventHttpMessageReader(decoder); - })); - } - - @Override - protected void addStringReaderTextOnlyTo(List> result) { - addReaderTo(result, - () -> new DecoderHttpMessageReader<>(StringDecoder.textPlainOnly(false))); - } - - @Override - protected void addStringReaderTo(List> result) { - addReaderTo(result, - () -> new DecoderHttpMessageReader<>(StringDecoder.allMimeTypes(false))); + private MultipartHttpMessageWriter getMultipartHttpMessageWriter() { + return this.multipartCodecs != null ? + new MultipartHttpMessageWriter(this.multipartCodecs.getWriters()) : + new MultipartHttpMessageWriter(); } } diff --git a/spring-web/src/main/java/org/springframework/http/codec/DefaultServerCodecConfigurer.java b/spring-web/src/main/java/org/springframework/http/codec/DefaultServerCodecConfigurer.java index 9a5a5a18a7..cbe3c3fcaa 100644 --- a/spring-web/src/main/java/org/springframework/http/codec/DefaultServerCodecConfigurer.java +++ b/spring-web/src/main/java/org/springframework/http/codec/DefaultServerCodecConfigurer.java @@ -16,11 +16,10 @@ package org.springframework.http.codec; +import java.util.Collections; import java.util.List; import org.springframework.core.codec.Encoder; -import org.springframework.core.codec.StringDecoder; -import org.springframework.http.codec.json.Jackson2JsonEncoder; import org.springframework.http.codec.multipart.MultipartHttpMessageReader; import org.springframework.http.codec.multipart.SynchronossPartHttpMessageReader; import org.springframework.util.ClassUtils; @@ -55,53 +54,51 @@ class DefaultServerCodecConfigurer extends AbstractCodecConfigurer implements Se private static class ServerDefaultCodecsImpl extends AbstractDefaultCodecs implements ServerDefaultCodecs { + private Encoder sseEncoder; + + @Override public void serverSentEventEncoder(Encoder encoder) { - HttpMessageWriter writer = new ServerSentEventHttpMessageWriter(encoder); - getWriters().put(ServerSentEventHttpMessageWriter.class, writer); + this.sseEncoder = encoder; + } + + + @Override + protected boolean splitTextOnNewLine() { + return true; } @Override - public void addTypedReadersTo(List> result) { - super.addTypedReadersTo(result); - addReaderTo(result, FormHttpMessageReader::new); + public List> getTypedReaders() { + if (!shouldRegisterDefaults()) { + return Collections.emptyList(); + } + List> result = super.getTypedReaders(); + result.add(new FormHttpMessageReader()); if (synchronossMultipartPresent) { SynchronossPartHttpMessageReader partReader = new SynchronossPartHttpMessageReader(); - addReaderTo(result, () -> partReader); - addReaderTo(result, () -> new MultipartHttpMessageReader(partReader)); + result.add(partReader); + result.add(new MultipartHttpMessageReader(partReader)); } + return result; } @Override - protected void addObjectWritersTo(List> result) { - super.addObjectWritersTo(result); - addServerSentEventWriterTo(result); + public List> getObjectWriters() { + if (!shouldRegisterDefaults()) { + return Collections.emptyList(); + } + List> result = super.getObjectWriters(); + result.add(new ServerSentEventHttpMessageWriter(getSseEncoder())); + return result; } - - private void addServerSentEventWriterTo(List> result) { - addWriterTo(result, () -> findWriter(ServerSentEventHttpMessageWriter.class, () -> { - Encoder encoder = null; - if (jackson2Present) { - encoder = findEncoderWriter( - Jackson2JsonEncoder.class, Jackson2JsonEncoder::new).getEncoder(); - } - return new ServerSentEventHttpMessageWriter(encoder); - })); + private Encoder getSseEncoder() { + if (this.sseEncoder != null) { + return this.sseEncoder; + } + return jackson2Present ? jackson2Encoder() : null; } - - @Override - protected void addStringReaderTextOnlyTo(List> result) { - addReaderTo(result, - () -> new DecoderHttpMessageReader<>(StringDecoder.textPlainOnly(true))); - } - - @Override - protected void addStringReaderTo(List> result) { - addReaderTo(result, - () -> new DecoderHttpMessageReader<>(StringDecoder.allMimeTypes(true))); - } - } } diff --git a/spring-web/src/main/java/org/springframework/http/codec/ServerCodecConfigurer.java b/spring-web/src/main/java/org/springframework/http/codec/ServerCodecConfigurer.java index 54a7bbe8fa..ca08badc71 100644 --- a/spring-web/src/main/java/org/springframework/http/codec/ServerCodecConfigurer.java +++ b/spring-web/src/main/java/org/springframework/http/codec/ServerCodecConfigurer.java @@ -17,6 +17,7 @@ package org.springframework.http.codec; import org.springframework.core.codec.Encoder; +import org.springframework.http.codec.json.Jackson2JsonEncoder; /** * Helps to configure a list of server-side HTTP message readers and writers @@ -34,10 +35,7 @@ import org.springframework.core.codec.Encoder; */ public interface ServerCodecConfigurer extends CodecConfigurer { - /** - * {@inheritDoc} - *

Overriden to return {@link ServerDefaultCodecs}. - */ + @Override ServerDefaultCodecs defaultCodecs(); @@ -52,17 +50,17 @@ public interface ServerCodecConfigurer extends CodecConfigurer { /** - * Extension of {@link AbstractCodecConfigurer} with extra server options. + * Extension of {@link DefaultCodecs} with extra server options. */ interface ServerDefaultCodecs extends DefaultCodecs { /** * Configure the {@code Encoder} to use for Server-Sent Events. - *

By default the {@link #jackson2Encoder} override is used for SSE. - * @param encoder the encoder to use + *

By default if this is not set, and Jackson is available, the + * {@link #jackson2Encoder} override is used instead. Use this property + * if you want to further customize the SSE encoder. */ void serverSentEventEncoder(Encoder encoder); - } } diff --git a/spring-web/src/test/java/org/springframework/http/codec/CodecConfigurerTests.java b/spring-web/src/test/java/org/springframework/http/codec/CodecConfigurerTests.java index 73e19ec09a..4c33e9b483 100644 --- a/spring-web/src/test/java/org/springframework/http/codec/CodecConfigurerTests.java +++ b/spring-web/src/test/java/org/springframework/http/codec/CodecConfigurerTests.java @@ -289,13 +289,8 @@ public class CodecConfigurerTests { private static class TestDefaultCodecs extends AbstractDefaultCodecs { @Override - protected void addStringReaderTextOnlyTo(List> result) { - addReaderTo(result, () -> new DecoderHttpMessageReader<>(StringDecoder.textPlainOnly(true))); - } - - @Override - protected void addStringReaderTo(List> result) { - addReaderTo(result, () -> new DecoderHttpMessageReader<>(StringDecoder.allMimeTypes(true))); + protected boolean splitTextOnNewLine() { + return true; } } }