Browse Source

Enforce custom string converter in HttpMessageConverters

Prior to this commit, configuring a custom `StringHttpMessageConverter`
would be overwritten when the `registerDefaults()` option is enabled.

Fixes gh-35563
pull/35567/head
Brian Clozel 3 months ago
parent
commit
d98179e137
  1. 4
      spring-web/src/main/java/org/springframework/http/converter/DefaultHttpMessageConverters.java
  2. 21
      spring-web/src/test/java/org/springframework/http/converter/DefaultHttpMessageConvertersTests.java

4
spring-web/src/main/java/org/springframework/http/converter/DefaultHttpMessageConverters.java

@ -247,8 +247,10 @@ class DefaultHttpMessageConverters implements HttpMessageConverters { @@ -247,8 +247,10 @@ class DefaultHttpMessageConverters implements HttpMessageConverters {
void detectMessageConverters() {
this.byteArrayMessageConverter = new ByteArrayHttpMessageConverter();
this.stringMessageConverter = new StringHttpMessageConverter();
if (this.stringMessageConverter == null) {
this.stringMessageConverter = new StringHttpMessageConverter();
}
if (this.jsonMessageConverter == null) {
if (JACKSON_PRESENT) {
this.jsonMessageConverter = new JacksonJsonHttpMessageConverter();

21
spring-web/src/test/java/org/springframework/http/converter/DefaultHttpMessageConvertersTests.java

@ -177,6 +177,16 @@ class DefaultHttpMessageConvertersTests { @@ -177,6 +177,16 @@ class DefaultHttpMessageConvertersTests {
assertThat(customConverter).isEqualTo(jacksonConverter);
}
@Test
void shouldOverrideStringConverters() {
var stringConverter = new StringHttpMessageConverter();
var converters = HttpMessageConverters.forClient().registerDefaults()
.stringMessageConverter(stringConverter).build();
var actualConverter = findMessageConverter(StringHttpMessageConverter.class, converters);
assertThat(actualConverter).isEqualTo(stringConverter);
}
@Test
void shouldConfigureConverter() {
var customConverter = new CustomHttpMessageConverter();
@ -271,6 +281,17 @@ class DefaultHttpMessageConvertersTests { @@ -271,6 +281,17 @@ class DefaultHttpMessageConvertersTests {
assertThat(customConverter).isEqualTo(jacksonConverter);
}
@Test
void shouldOverrideStringConverters() {
var stringConverter = new StringHttpMessageConverter();
var converters = HttpMessageConverters.forServer().registerDefaults()
.stringMessageConverter(stringConverter).build();
var actualConverter = findMessageConverter(StringHttpMessageConverter.class, converters);
assertThat(actualConverter).isEqualTo(stringConverter);
}
@Test
void shouldConfigureConverter() {
var customConverter = new CustomHttpMessageConverter();

Loading…
Cancel
Save