Introduce ServerCodecConfigurer
Issue: SPR-15247
This commit is contained in:
@@ -30,8 +30,8 @@ import org.mockito.MockitoAnnotations;
|
||||
import org.springframework.context.support.StaticApplicationContext;
|
||||
import org.springframework.core.convert.ConversionService;
|
||||
import org.springframework.format.FormatterRegistry;
|
||||
import org.springframework.http.codec.ServerHttpMessageReader;
|
||||
import org.springframework.http.codec.ServerHttpMessageWriter;
|
||||
import org.springframework.http.codec.ServerCodecConfigurer;
|
||||
import org.springframework.validation.beanvalidation.LocalValidatorFactoryBean;
|
||||
import org.springframework.web.bind.support.ConfigurableWebBindingInitializer;
|
||||
import org.springframework.web.reactive.accept.RequestedContentTypeResolverBuilder;
|
||||
@@ -58,7 +58,7 @@ public class DelegatingWebFluxConfigurationTests {
|
||||
private WebFluxConfigurer webFluxConfigurer;
|
||||
|
||||
@Captor
|
||||
private ArgumentCaptor<List<ServerHttpMessageReader<?>>> readers;
|
||||
private ArgumentCaptor<ServerCodecConfigurer> codecsConfigurer;
|
||||
|
||||
@Captor
|
||||
private ArgumentCaptor<List<ServerHttpMessageWriter<?>>> writers;
|
||||
@@ -96,15 +96,14 @@ public class DelegatingWebFluxConfigurationTests {
|
||||
ConversionService initializerConversionService = initializer.getConversionService();
|
||||
assertTrue(initializer.getValidator() instanceof LocalValidatorFactoryBean);
|
||||
|
||||
verify(webFluxConfigurer).configureMessageReaders(readers.capture());
|
||||
verify(webFluxConfigurer).extendMessageReaders(readers.capture());
|
||||
verify(webFluxConfigurer).configureHttpMessageCodecs(codecsConfigurer.capture());
|
||||
verify(webFluxConfigurer).getValidator();
|
||||
verify(webFluxConfigurer).getMessageCodesResolver();
|
||||
verify(webFluxConfigurer).addFormatters(formatterRegistry.capture());
|
||||
verify(webFluxConfigurer).addArgumentResolvers(any());
|
||||
|
||||
assertSame(formatterRegistry.getValue(), initializerConversionService);
|
||||
assertEquals(7, readers.getValue().size());
|
||||
assertEquals(8, codecsConfigurer.getValue().getReaders().size());
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -126,8 +125,7 @@ public class DelegatingWebFluxConfigurationTests {
|
||||
delegatingConfig.setConfigurers(Collections.singletonList(webFluxConfigurer));
|
||||
delegatingConfig.responseBodyResultHandler();
|
||||
|
||||
verify(webFluxConfigurer).configureMessageWriters(writers.capture());
|
||||
verify(webFluxConfigurer).extendMessageWriters(writers.capture());
|
||||
verify(webFluxConfigurer).configureHttpMessageCodecs(codecsConfigurer.capture());
|
||||
verify(webFluxConfigurer).configureContentTypeResolver(any(RequestedContentTypeResolverBuilder.class));
|
||||
}
|
||||
|
||||
|
||||
@@ -34,10 +34,9 @@ import org.springframework.core.codec.StringDecoder;
|
||||
import org.springframework.core.convert.ConversionService;
|
||||
import org.springframework.core.io.Resource;
|
||||
import org.springframework.http.MediaType;
|
||||
import org.springframework.http.codec.DecoderHttpMessageReader;
|
||||
import org.springframework.http.codec.EncoderHttpMessageWriter;
|
||||
import org.springframework.http.codec.ServerHttpMessageReader;
|
||||
import org.springframework.http.codec.ServerHttpMessageWriter;
|
||||
import org.springframework.http.codec.ServerCodecConfigurer;
|
||||
import org.springframework.http.codec.json.Jackson2JsonEncoder;
|
||||
import org.springframework.http.codec.xml.Jaxb2XmlDecoder;
|
||||
import org.springframework.http.codec.xml.Jaxb2XmlEncoder;
|
||||
@@ -128,7 +127,7 @@ public class WebFluxConfigurationSupportTests {
|
||||
assertNotNull(adapter);
|
||||
|
||||
List<ServerHttpMessageReader<?>> readers = adapter.getMessageReaders();
|
||||
assertEquals(7, readers.size());
|
||||
assertEquals(8, readers.size());
|
||||
|
||||
assertHasMessageReader(readers, byte[].class, APPLICATION_OCTET_STREAM);
|
||||
assertHasMessageReader(readers, ByteBuffer.class, APPLICATION_OCTET_STREAM);
|
||||
@@ -297,23 +296,12 @@ public class WebFluxConfigurationSupportTests {
|
||||
static class CustomMessageConverterConfig extends WebFluxConfigurationSupport {
|
||||
|
||||
@Override
|
||||
protected void configureMessageReaders(List<ServerHttpMessageReader<?>> messageReaders) {
|
||||
messageReaders.add(new DecoderHttpMessageReader<>(StringDecoder.textPlainOnly(true)));
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void configureMessageWriters(List<ServerHttpMessageWriter<?>> messageWriters) {
|
||||
messageWriters.add(new EncoderHttpMessageWriter<>(CharSequenceEncoder.textPlainOnly()));
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void extendMessageReaders(List<ServerHttpMessageReader<?>> messageReaders) {
|
||||
messageReaders.add(new DecoderHttpMessageReader<>(new Jaxb2XmlDecoder()));
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void extendMessageWriters(List<ServerHttpMessageWriter<?>> messageWriters) {
|
||||
messageWriters.add(new EncoderHttpMessageWriter<>(new Jaxb2XmlEncoder()));
|
||||
protected void configureHttpMessageCodecs(ServerCodecConfigurer configurer) {
|
||||
configurer.registerDefaults(false);
|
||||
configurer.customCodec().decoder(StringDecoder.textPlainOnly(true));
|
||||
configurer.customCodec().decoder(new Jaxb2XmlDecoder());
|
||||
configurer.customCodec().encoder(CharSequenceEncoder.textPlainOnly());
|
||||
configurer.customCodec().encoder(new Jaxb2XmlEncoder());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -120,16 +120,19 @@ public class DispatcherHandlerIntegrationTests extends AbstractHttpHandlerIntegr
|
||||
@Bean
|
||||
public HandlerMapping handlerMapping(RouterFunction<?> routerFunction,
|
||||
ApplicationContext applicationContext) {
|
||||
|
||||
return RouterFunctions.toHandlerMapping(routerFunction,
|
||||
new HandlerStrategies() {
|
||||
@Override
|
||||
public Supplier<Stream<HttpMessageReader<?>>> messageReaders() {
|
||||
return () -> getMessageReaders().stream().map(reader -> (HttpMessageReader<?>) reader);
|
||||
return () -> getMessageCodecsConfigurer().getReaders().stream()
|
||||
.map(reader -> (HttpMessageReader<?>) reader);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Supplier<Stream<HttpMessageWriter<?>>> messageWriters() {
|
||||
return () -> getMessageWriters().stream().map(writer -> (HttpMessageWriter<?>) writer);
|
||||
return () -> getMessageCodecsConfigurer().getWriters().stream()
|
||||
.map(writer -> (HttpMessageWriter<?>) writer);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
Reference in New Issue
Block a user