Add register methods to CodecConfigurer.CustomCodecs

The new register methods replace the now deprecated
encoder, decoder, reader, and writer methods, and also offer a choice
to opt into default properties such maxInMemorySize, if configured.

See gh-24124
This commit is contained in:
Rossen Stoyanchev
2019-12-12 18:06:12 +00:00
parent 9d65830133
commit 11e321b8e7
7 changed files with 220 additions and 68 deletions

View File

@@ -121,11 +121,11 @@ public class CodecConfigurerTests {
given(customReader1.canRead(ResolvableType.forClass(Object.class), null)).willReturn(false);
given(customReader2.canRead(ResolvableType.forClass(Object.class), null)).willReturn(true);
this.configurer.customCodecs().decoder(customDecoder1);
this.configurer.customCodecs().decoder(customDecoder2);
this.configurer.customCodecs().register(customDecoder1);
this.configurer.customCodecs().register(customDecoder2);
this.configurer.customCodecs().reader(customReader1);
this.configurer.customCodecs().reader(customReader2);
this.configurer.customCodecs().register(customReader1);
this.configurer.customCodecs().register(customReader2);
List<HttpMessageReader<?>> readers = this.configurer.getReaders();
@@ -161,11 +161,11 @@ public class CodecConfigurerTests {
given(customWriter1.canWrite(ResolvableType.forClass(Object.class), null)).willReturn(false);
given(customWriter2.canWrite(ResolvableType.forClass(Object.class), null)).willReturn(true);
this.configurer.customCodecs().encoder(customEncoder1);
this.configurer.customCodecs().encoder(customEncoder2);
this.configurer.customCodecs().register(customEncoder1);
this.configurer.customCodecs().register(customEncoder2);
this.configurer.customCodecs().writer(customWriter1);
this.configurer.customCodecs().writer(customWriter2);
this.configurer.customCodecs().register(customWriter1);
this.configurer.customCodecs().register(customWriter2);
List<HttpMessageWriter<?>> writers = this.configurer.getWriters();
@@ -200,11 +200,11 @@ public class CodecConfigurerTests {
given(customReader1.canRead(ResolvableType.forClass(Object.class), null)).willReturn(false);
given(customReader2.canRead(ResolvableType.forClass(Object.class), null)).willReturn(true);
this.configurer.customCodecs().decoder(customDecoder1);
this.configurer.customCodecs().decoder(customDecoder2);
this.configurer.customCodecs().register(customDecoder1);
this.configurer.customCodecs().register(customDecoder2);
this.configurer.customCodecs().reader(customReader1);
this.configurer.customCodecs().reader(customReader2);
this.configurer.customCodecs().register(customReader1);
this.configurer.customCodecs().register(customReader2);
this.configurer.registerDefaults(false);
@@ -231,11 +231,11 @@ public class CodecConfigurerTests {
given(customWriter1.canWrite(ResolvableType.forClass(Object.class), null)).willReturn(false);
given(customWriter2.canWrite(ResolvableType.forClass(Object.class), null)).willReturn(true);
this.configurer.customCodecs().encoder(customEncoder1);
this.configurer.customCodecs().encoder(customEncoder2);
this.configurer.customCodecs().register(customEncoder1);
this.configurer.customCodecs().register(customEncoder2);
this.configurer.customCodecs().writer(customWriter1);
this.configurer.customCodecs().writer(customWriter2);
this.configurer.customCodecs().register(customWriter1);
this.configurer.customCodecs().register(customWriter2);
this.configurer.registerDefaults(false);
@@ -277,10 +277,10 @@ public class CodecConfigurerTests {
this.configurer.registerDefaults(false);
CodecConfigurer clone = this.configurer.clone();
clone.customCodecs().encoder(new Jackson2JsonEncoder());
clone.customCodecs().decoder(new Jackson2JsonDecoder());
clone.customCodecs().reader(new ServerSentEventHttpMessageReader());
clone.customCodecs().writer(new ServerSentEventHttpMessageWriter());
clone.customCodecs().register(new Jackson2JsonEncoder());
clone.customCodecs().register(new Jackson2JsonDecoder());
clone.customCodecs().register(new ServerSentEventHttpMessageReader());
clone.customCodecs().register(new ServerSentEventHttpMessageWriter());
assertThat(this.configurer.getReaders().size()).isEqualTo(0);
assertThat(this.configurer.getWriters().size()).isEqualTo(0);
@@ -337,6 +337,7 @@ public class CodecConfigurerTests {
assertThat(encoders).doesNotContain(jacksonEncoder, jaxb2Encoder, protoEncoder);
}
@SuppressWarnings("deprecation")
@Test
void withDefaultCodecConfig() {
AtomicBoolean callbackCalled = new AtomicBoolean(false);

View File

@@ -40,6 +40,7 @@ import org.springframework.core.codec.ResourceDecoder;
import org.springframework.core.codec.StringDecoder;
import org.springframework.core.io.buffer.DefaultDataBufferFactory;
import org.springframework.http.MediaType;
import org.springframework.http.codec.CodecConfigurer;
import org.springframework.http.codec.DecoderHttpMessageReader;
import org.springframework.http.codec.EncoderHttpMessageWriter;
import org.springframework.http.codec.FormHttpMessageReader;
@@ -129,8 +130,8 @@ public class ServerCodecConfigurerTests {
public void maxInMemorySize() {
int size = 99;
this.configurer.defaultCodecs().maxInMemorySize(size);
List<HttpMessageReader<?>> readers = this.configurer.getReaders();
assertThat(readers.size()).isEqualTo(13);
assertThat(((ByteArrayDecoder) getNextDecoder(readers)).getMaxInMemorySize()).isEqualTo(size);
assertThat(((ByteBufferDecoder) getNextDecoder(readers)).getMaxInMemorySize()).isEqualTo(size);
assertThat(((DataBufferDecoder) getNextDecoder(readers)).getMaxInMemorySize()).isEqualTo(size);
@@ -150,6 +151,28 @@ public class ServerCodecConfigurerTests {
assertThat(((StringDecoder) getNextDecoder(readers)).getMaxInMemorySize()).isEqualTo(size);
}
@Test
public void maxInMemorySizeWithCustomCodecs() {
int size = 99;
this.configurer.defaultCodecs().maxInMemorySize(size);
this.configurer.registerDefaults(false);
CodecConfigurer.CustomCodecs customCodecs = this.configurer.customCodecs();
customCodecs.register(new ByteArrayDecoder());
customCodecs.registerWithDefaultConfig(new ByteArrayDecoder());
customCodecs.register(new Jackson2JsonDecoder());
customCodecs.registerWithDefaultConfig(new Jackson2JsonDecoder());
this.configurer.defaultCodecs().enableLoggingRequestDetails(true);
List<HttpMessageReader<?>> readers = this.configurer.getReaders();
assertThat(((ByteArrayDecoder) getNextDecoder(readers)).getMaxInMemorySize()).isEqualTo(256 * 1024);
assertThat(((ByteArrayDecoder) getNextDecoder(readers)).getMaxInMemorySize()).isEqualTo(size);
assertThat(((Jackson2JsonDecoder) getNextDecoder(readers)).getMaxInMemorySize()).isEqualTo(256 * 1024);
assertThat(((Jackson2JsonDecoder) getNextDecoder(readers)).getMaxInMemorySize()).isEqualTo(size);
}
@Test
public void enableRequestLoggingDetails() {
this.configurer.defaultCodecs().enableLoggingRequestDetails(true);
@@ -164,6 +187,21 @@ public class ServerCodecConfigurerTests {
assertThat(reader.isEnableLoggingRequestDetails()).isTrue();
}
@Test
public void enableRequestLoggingDetailsWithCustomCodecs() {
this.configurer.registerDefaults(false);
this.configurer.defaultCodecs().enableLoggingRequestDetails(true);
CodecConfigurer.CustomCodecs customCodecs = this.configurer.customCodecs();
customCodecs.register(new FormHttpMessageReader());
customCodecs.registerWithDefaultConfig(new FormHttpMessageReader());
List<HttpMessageReader<?>> readers = this.configurer.getReaders();
assertThat(((FormHttpMessageReader) readers.get(0)).isEnableLoggingRequestDetails()).isFalse();
assertThat(((FormHttpMessageReader) readers.get(1)).isEnableLoggingRequestDetails()).isTrue();
}
@Test
public void cloneConfigurer() {
ServerCodecConfigurer clone = this.configurer.clone();