Use FormHttpMessageReader by default in ServerCodecConfigurer
This commit is contained in:
parent
c9f4fca944
commit
3598addc0e
|
|
@ -109,6 +109,8 @@ public class ServerCodecConfigurer {
|
|||
this.defaultCodecs.addReaderTo(result, ResourceDecoder.class, ResourceDecoder::new);
|
||||
this.defaultCodecs.addStringReaderTextOnlyTo(result);
|
||||
|
||||
this.defaultCodecs.addReaderTo(result, FormHttpMessageReader::new);
|
||||
|
||||
// Custom, concrete Java type readers
|
||||
this.customCodecs.addTypedReadersTo(result);
|
||||
|
||||
|
|
|
|||
|
|
@ -61,12 +61,13 @@ public class ServerCodecConfigurerTests {
|
|||
@Test
|
||||
public void defaultReaders() throws Exception {
|
||||
List<HttpMessageReader<?>> readers = this.configurer.getReaders();
|
||||
assertEquals(8, readers.size());
|
||||
assertEquals(9, readers.size());
|
||||
assertEquals(ByteArrayDecoder.class, getNextDecoder(readers).getClass());
|
||||
assertEquals(ByteBufferDecoder.class, getNextDecoder(readers).getClass());
|
||||
assertEquals(DataBufferDecoder.class, getNextDecoder(readers).getClass());
|
||||
assertEquals(ResourceDecoder.class, getNextDecoder(readers).getClass());
|
||||
assertStringDecoder(getNextDecoder(readers), true);
|
||||
assertEquals(FormHttpMessageReader.class, readers.get(this.index.getAndIncrement()).getClass());
|
||||
assertEquals(Jaxb2XmlDecoder.class, getNextDecoder(readers).getClass());
|
||||
assertEquals(Jackson2JsonDecoder.class, getNextDecoder(readers).getClass());
|
||||
assertStringDecoder(getNextDecoder(readers), false);
|
||||
|
|
@ -110,12 +111,13 @@ public class ServerCodecConfigurerTests {
|
|||
|
||||
List<HttpMessageReader<?>> readers = this.configurer.getReaders();
|
||||
|
||||
assertEquals(12, readers.size());
|
||||
assertEquals(13, readers.size());
|
||||
assertEquals(ByteArrayDecoder.class, getNextDecoder(readers).getClass());
|
||||
assertEquals(ByteBufferDecoder.class, getNextDecoder(readers).getClass());
|
||||
assertEquals(DataBufferDecoder.class, getNextDecoder(readers).getClass());
|
||||
assertEquals(ResourceDecoder.class, getNextDecoder(readers).getClass());
|
||||
assertEquals(StringDecoder.class, getNextDecoder(readers).getClass());
|
||||
assertEquals(FormHttpMessageReader.class, readers.get(this.index.getAndIncrement()).getClass());
|
||||
assertSame(customDecoder1, getNextDecoder(readers));
|
||||
assertSame(customReader1, readers.get(this.index.getAndIncrement()));
|
||||
assertEquals(Jaxb2XmlDecoder.class, getNextDecoder(readers).getClass());
|
||||
|
|
|
|||
|
|
@ -103,7 +103,7 @@ public class DelegatingWebFluxConfigurationTests {
|
|||
verify(webFluxConfigurer).addArgumentResolvers(any());
|
||||
|
||||
assertSame(formatterRegistry.getValue(), initializerConversionService);
|
||||
assertEquals(8, codecsConfigurer.getValue().getReaders().size());
|
||||
assertEquals(9, codecsConfigurer.getValue().getReaders().size());
|
||||
}
|
||||
|
||||
@Test
|
||||
|
|
|
|||
|
|
@ -43,6 +43,7 @@ import org.springframework.http.codec.xml.Jaxb2XmlEncoder;
|
|||
import org.springframework.mock.http.server.reactive.test.MockServerHttpRequest;
|
||||
import org.springframework.util.MimeType;
|
||||
import org.springframework.util.MimeTypeUtils;
|
||||
import org.springframework.util.MultiValueMap;
|
||||
import org.springframework.validation.Validator;
|
||||
import org.springframework.web.bind.support.WebBindingInitializer;
|
||||
import org.springframework.web.bind.support.WebExchangeDataBinder;
|
||||
|
|
@ -67,11 +68,8 @@ import static org.junit.Assert.assertFalse;
|
|||
import static org.junit.Assert.assertNotNull;
|
||||
import static org.junit.Assert.assertSame;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
import static org.springframework.http.MediaType.APPLICATION_JSON;
|
||||
import static org.springframework.http.MediaType.APPLICATION_OCTET_STREAM;
|
||||
import static org.springframework.http.MediaType.APPLICATION_XML;
|
||||
import static org.springframework.http.MediaType.IMAGE_PNG;
|
||||
import static org.springframework.http.MediaType.TEXT_PLAIN;
|
||||
import static org.springframework.core.ResolvableType.*;
|
||||
import static org.springframework.http.MediaType.*;
|
||||
|
||||
/**
|
||||
* Unit tests for {@link WebFluxConfigurationSupport}.
|
||||
|
|
@ -127,15 +125,16 @@ public class WebFluxConfigurationSupportTests {
|
|||
assertNotNull(adapter);
|
||||
|
||||
List<HttpMessageReader<?>> readers = adapter.getMessageReaders();
|
||||
assertEquals(8, readers.size());
|
||||
assertEquals(9, readers.size());
|
||||
|
||||
assertHasMessageReader(readers, byte[].class, APPLICATION_OCTET_STREAM);
|
||||
assertHasMessageReader(readers, ByteBuffer.class, APPLICATION_OCTET_STREAM);
|
||||
assertHasMessageReader(readers, String.class, TEXT_PLAIN);
|
||||
assertHasMessageReader(readers, Resource.class, IMAGE_PNG);
|
||||
assertHasMessageReader(readers, TestBean.class, APPLICATION_XML);
|
||||
assertHasMessageReader(readers, TestBean.class, APPLICATION_JSON);
|
||||
assertHasMessageReader(readers, TestBean.class, null);
|
||||
assertHasMessageReader(readers, forClass(byte[].class), APPLICATION_OCTET_STREAM);
|
||||
assertHasMessageReader(readers, forClass(ByteBuffer.class), APPLICATION_OCTET_STREAM);
|
||||
assertHasMessageReader(readers, forClass(String.class), TEXT_PLAIN);
|
||||
assertHasMessageReader(readers, forClass(Resource.class), IMAGE_PNG);
|
||||
assertHasMessageReader(readers, forClassWithGenerics(MultiValueMap.class, String.class, String.class), APPLICATION_FORM_URLENCODED);
|
||||
assertHasMessageReader(readers, forClass(TestBean.class), APPLICATION_XML);
|
||||
assertHasMessageReader(readers, forClass(TestBean.class), APPLICATION_JSON);
|
||||
assertHasMessageReader(readers, forClass(TestBean.class), null);
|
||||
|
||||
WebBindingInitializer bindingInitializer = adapter.getWebBindingInitializer();
|
||||
assertNotNull(bindingInitializer);
|
||||
|
|
@ -162,8 +161,8 @@ public class WebFluxConfigurationSupportTests {
|
|||
List<HttpMessageReader<?>> messageReaders = adapter.getMessageReaders();
|
||||
assertEquals(2, messageReaders.size());
|
||||
|
||||
assertHasMessageReader(messageReaders, String.class, TEXT_PLAIN);
|
||||
assertHasMessageReader(messageReaders, TestBean.class, APPLICATION_XML);
|
||||
assertHasMessageReader(messageReaders, forClass(String.class), TEXT_PLAIN);
|
||||
assertHasMessageReader(messageReaders, forClass(TestBean.class), APPLICATION_XML);
|
||||
}
|
||||
|
||||
@Test
|
||||
|
|
@ -179,13 +178,13 @@ public class WebFluxConfigurationSupportTests {
|
|||
List<HttpMessageWriter<?>> writers = handler.getMessageWriters();
|
||||
assertEquals(9, writers.size());
|
||||
|
||||
assertHasMessageWriter(writers, byte[].class, APPLICATION_OCTET_STREAM);
|
||||
assertHasMessageWriter(writers, ByteBuffer.class, APPLICATION_OCTET_STREAM);
|
||||
assertHasMessageWriter(writers, String.class, TEXT_PLAIN);
|
||||
assertHasMessageWriter(writers, Resource.class, IMAGE_PNG);
|
||||
assertHasMessageWriter(writers, TestBean.class, APPLICATION_XML);
|
||||
assertHasMessageWriter(writers, TestBean.class, APPLICATION_JSON);
|
||||
assertHasMessageWriter(writers, TestBean.class, MediaType.parseMediaType("text/event-stream"));
|
||||
assertHasMessageWriter(writers, forClass(byte[].class), APPLICATION_OCTET_STREAM);
|
||||
assertHasMessageWriter(writers, forClass(ByteBuffer.class), APPLICATION_OCTET_STREAM);
|
||||
assertHasMessageWriter(writers, forClass(String.class), TEXT_PLAIN);
|
||||
assertHasMessageWriter(writers, forClass(Resource.class), IMAGE_PNG);
|
||||
assertHasMessageWriter(writers, forClass(TestBean.class), APPLICATION_XML);
|
||||
assertHasMessageWriter(writers, forClass(TestBean.class), APPLICATION_JSON);
|
||||
assertHasMessageWriter(writers, forClass(TestBean.class), MediaType.parseMediaType("text/event-stream"));
|
||||
|
||||
name = "webFluxContentTypeResolver";
|
||||
RequestedContentTypeResolver resolver = context.getBean(name, RequestedContentTypeResolver.class);
|
||||
|
|
@ -205,13 +204,13 @@ public class WebFluxConfigurationSupportTests {
|
|||
List<HttpMessageWriter<?>> writers = handler.getMessageWriters();
|
||||
assertEquals(9, writers.size());
|
||||
|
||||
assertHasMessageWriter(writers, byte[].class, APPLICATION_OCTET_STREAM);
|
||||
assertHasMessageWriter(writers, ByteBuffer.class, APPLICATION_OCTET_STREAM);
|
||||
assertHasMessageWriter(writers, String.class, TEXT_PLAIN);
|
||||
assertHasMessageWriter(writers, Resource.class, IMAGE_PNG);
|
||||
assertHasMessageWriter(writers, TestBean.class, APPLICATION_XML);
|
||||
assertHasMessageWriter(writers, TestBean.class, APPLICATION_JSON);
|
||||
assertHasMessageWriter(writers, TestBean.class, null);
|
||||
assertHasMessageWriter(writers, forClass(byte[].class), APPLICATION_OCTET_STREAM);
|
||||
assertHasMessageWriter(writers, forClass(ByteBuffer.class), APPLICATION_OCTET_STREAM);
|
||||
assertHasMessageWriter(writers, forClass(String.class), TEXT_PLAIN);
|
||||
assertHasMessageWriter(writers, forClass(Resource.class), IMAGE_PNG);
|
||||
assertHasMessageWriter(writers, forClass(TestBean.class), APPLICATION_XML);
|
||||
assertHasMessageWriter(writers, forClass(TestBean.class), APPLICATION_JSON);
|
||||
assertHasMessageWriter(writers, forClass(TestBean.class), null);
|
||||
|
||||
name = "webFluxContentTypeResolver";
|
||||
RequestedContentTypeResolver resolver = context.getBean(name, RequestedContentTypeResolver.class);
|
||||
|
|
@ -258,13 +257,11 @@ public class WebFluxConfigurationSupportTests {
|
|||
}
|
||||
|
||||
|
||||
private void assertHasMessageReader(List<HttpMessageReader<?>> readers, Class<?> clazz, MediaType mediaType) {
|
||||
ResolvableType type = ResolvableType.forClass(clazz);
|
||||
private void assertHasMessageReader(List<HttpMessageReader<?>> readers, ResolvableType type, MediaType mediaType) {
|
||||
assertTrue(readers.stream().anyMatch(c -> mediaType == null || c.canRead(type, mediaType)));
|
||||
}
|
||||
|
||||
private void assertHasMessageWriter(List<HttpMessageWriter<?>> writers, Class<?> clazz, MediaType mediaType) {
|
||||
ResolvableType type = ResolvableType.forClass(clazz);
|
||||
private void assertHasMessageWriter(List<HttpMessageWriter<?>> writers, ResolvableType type, MediaType mediaType) {
|
||||
assertTrue(writers.stream().anyMatch(c -> mediaType == null || c.canWrite(type, mediaType)));
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue