String encoding for any MIME type
CharSequenceEncoder now supports all MIME types, however since encoding Flux<String> can overlap with other encoders (e.g. SSE) there are now two ways to create a CharSequenceEncoder -- with support for text/plain only or with support for any MIME type. In WebFlux configuration we insert one CharSequenceEncoder for text/plain (as we have so far) and a second instance with support for any MIME type at the very end. Issue: SPR-15374
This commit is contained in:
@@ -186,8 +186,8 @@ public class DispatcherHandlerErrorTests {
|
||||
|
||||
@Bean
|
||||
public ResponseBodyResultHandler resultHandler() {
|
||||
return new ResponseBodyResultHandler(
|
||||
Collections.singletonList(new EncoderHttpMessageWriter<>(new CharSequenceEncoder())),
|
||||
return new ResponseBodyResultHandler(Collections.singletonList(
|
||||
new EncoderHttpMessageWriter<>(CharSequenceEncoder.textPlainOnly())),
|
||||
new HeaderContentTypeResolver());
|
||||
}
|
||||
|
||||
|
||||
@@ -178,7 +178,7 @@ public class WebFluxConfigurationSupportTests {
|
||||
assertEquals(0, handler.getOrder());
|
||||
|
||||
List<ServerHttpMessageWriter<?>> writers = handler.getMessageWriters();
|
||||
assertEquals(8, writers.size());
|
||||
assertEquals(9, writers.size());
|
||||
|
||||
assertHasMessageWriter(writers, byte[].class, APPLICATION_OCTET_STREAM);
|
||||
assertHasMessageWriter(writers, ByteBuffer.class, APPLICATION_OCTET_STREAM);
|
||||
@@ -204,7 +204,7 @@ public class WebFluxConfigurationSupportTests {
|
||||
assertEquals(100, handler.getOrder());
|
||||
|
||||
List<ServerHttpMessageWriter<?>> writers = handler.getMessageWriters();
|
||||
assertEquals(8, writers.size());
|
||||
assertEquals(9, writers.size());
|
||||
|
||||
assertHasMessageWriter(writers, byte[].class, APPLICATION_OCTET_STREAM);
|
||||
assertHasMessageWriter(writers, ByteBuffer.class, APPLICATION_OCTET_STREAM);
|
||||
@@ -303,7 +303,7 @@ public class WebFluxConfigurationSupportTests {
|
||||
|
||||
@Override
|
||||
protected void configureMessageWriters(List<ServerHttpMessageWriter<?>> messageWriters) {
|
||||
messageWriters.add(new EncoderHttpMessageWriter<>(new CharSequenceEncoder()));
|
||||
messageWriters.add(new EncoderHttpMessageWriter<>(CharSequenceEncoder.textPlainOnly()));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -77,13 +77,14 @@ public class BodyInsertersTests {
|
||||
public void createContext() {
|
||||
final List<HttpMessageWriter<?>> messageWriters = new ArrayList<>();
|
||||
messageWriters.add(new EncoderHttpMessageWriter<>(new ByteBufferEncoder()));
|
||||
messageWriters.add(new EncoderHttpMessageWriter<>(new CharSequenceEncoder()));
|
||||
messageWriters.add(new EncoderHttpMessageWriter<>(CharSequenceEncoder.textPlainOnly()));
|
||||
messageWriters.add(new ResourceHttpMessageWriter());
|
||||
messageWriters.add(new EncoderHttpMessageWriter<>(new Jaxb2XmlEncoder()));
|
||||
Jackson2JsonEncoder jsonEncoder = new Jackson2JsonEncoder();
|
||||
messageWriters.add(new EncoderHttpMessageWriter<>(jsonEncoder));
|
||||
messageWriters.add(new ServerSentEventHttpMessageWriter(jsonEncoder));
|
||||
messageWriters.add(new FormHttpMessageWriter());
|
||||
messageWriters.add(new EncoderHttpMessageWriter<>(CharSequenceEncoder.allMimeTypes()));
|
||||
|
||||
this.context = new BodyInserter.Context() {
|
||||
@Override
|
||||
|
||||
@@ -104,7 +104,7 @@ public class DefaultClientRequestBuilderTests {
|
||||
.body(inserter).build();
|
||||
|
||||
List<HttpMessageWriter<?>> messageWriters = new ArrayList<>();
|
||||
messageWriters.add(new EncoderHttpMessageWriter<>(new CharSequenceEncoder()));
|
||||
messageWriters.add(new EncoderHttpMessageWriter<>(CharSequenceEncoder.allMimeTypes()));
|
||||
|
||||
ExchangeStrategies strategies = mock(ExchangeStrategies.class);
|
||||
when(strategies.messageWriters()).thenReturn(messageWriters::stream);
|
||||
|
||||
@@ -191,7 +191,9 @@ public class DefaultEntityResponseBuilderTests {
|
||||
|
||||
MockServerWebExchange exchange = MockServerHttpRequest.get("http://localhost").toExchange();
|
||||
|
||||
HandlerStrategies strategies = HandlerStrategies.empty().messageWriter(new EncoderHttpMessageWriter<>(new CharSequenceEncoder())).build();
|
||||
HandlerStrategies strategies = HandlerStrategies.empty()
|
||||
.messageWriter(new EncoderHttpMessageWriter<>(CharSequenceEncoder.allMimeTypes()))
|
||||
.build();
|
||||
|
||||
StepVerifier.create(result)
|
||||
.consumeNextWith(response -> {
|
||||
|
||||
@@ -76,7 +76,7 @@ public class MessageWriterResultHandlerTests {
|
||||
if (ObjectUtils.isEmpty(writers)) {
|
||||
writerList = new ArrayList<>();
|
||||
writerList.add(new EncoderHttpMessageWriter<>(new ByteBufferEncoder()));
|
||||
writerList.add(new EncoderHttpMessageWriter<>(new CharSequenceEncoder()));
|
||||
writerList.add(new EncoderHttpMessageWriter<>(CharSequenceEncoder.allMimeTypes()));
|
||||
writerList.add(new ResourceHttpMessageWriter());
|
||||
writerList.add(new EncoderHttpMessageWriter<>(new Jaxb2XmlEncoder()));
|
||||
writerList.add(new EncoderHttpMessageWriter<>(new Jackson2JsonEncoder()));
|
||||
|
||||
@@ -66,7 +66,7 @@ public class ResponseBodyResultHandlerTests {
|
||||
public void setup() throws Exception {
|
||||
List<ServerHttpMessageWriter<?>> writerList = new ArrayList<>(5);
|
||||
writerList.add(new EncoderHttpMessageWriter<>(new ByteBufferEncoder()));
|
||||
writerList.add(new EncoderHttpMessageWriter<>(new CharSequenceEncoder()));
|
||||
writerList.add(new EncoderHttpMessageWriter<>(CharSequenceEncoder.allMimeTypes()));
|
||||
writerList.add(new ResourceHttpMessageWriter());
|
||||
writerList.add(new EncoderHttpMessageWriter<>(new Jaxb2XmlEncoder()));
|
||||
writerList.add(new EncoderHttpMessageWriter<>(new Jackson2JsonEncoder()));
|
||||
|
||||
@@ -88,10 +88,11 @@ public class ResponseEntityResultHandlerTests {
|
||||
if (ObjectUtils.isEmpty(writers)) {
|
||||
writerList = new ArrayList<>();
|
||||
writerList.add(new EncoderHttpMessageWriter<>(new ByteBufferEncoder()));
|
||||
writerList.add(new EncoderHttpMessageWriter<>(new CharSequenceEncoder()));
|
||||
writerList.add(new EncoderHttpMessageWriter<>(CharSequenceEncoder.textPlainOnly()));
|
||||
writerList.add(new ResourceHttpMessageWriter());
|
||||
writerList.add(new EncoderHttpMessageWriter<>(new Jaxb2XmlEncoder()));
|
||||
writerList.add(new EncoderHttpMessageWriter<>(new Jackson2JsonEncoder()));
|
||||
writerList.add(new EncoderHttpMessageWriter<>(CharSequenceEncoder.allMimeTypes()));
|
||||
}
|
||||
else {
|
||||
writerList = Arrays.asList(writers);
|
||||
|
||||
@@ -104,7 +104,7 @@ public class HttpMessageWriterViewTests {
|
||||
|
||||
@Test
|
||||
public void extractObjectMultipleMatchesNotSupported() throws Exception {
|
||||
HttpMessageWriterView view = new HttpMessageWriterView(new CharSequenceEncoder());
|
||||
HttpMessageWriterView view = new HttpMessageWriterView(CharSequenceEncoder.allMimeTypes());
|
||||
view.setModelKeys(new HashSet<>(Arrays.asList("foo1", "foo2")));
|
||||
this.model.addAttribute("foo1", "bar1");
|
||||
this.model.addAttribute("foo2", "bar2");
|
||||
|
||||
Reference in New Issue
Block a user