Skip to content

Commit 147094b

Browse files
author
jihoon.son
committed
fix StringHttpMessageConverter
1 parent 9f8a6bb commit 147094b

File tree

2 files changed

+28
-1
lines changed

2 files changed

+28
-1
lines changed

spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/http/HttpMessageConverters.java

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import java.util.Map;
2727

2828
import org.springframework.http.converter.HttpMessageConverter;
29+
import org.springframework.http.converter.StringHttpMessageConverter;
2930
import org.springframework.http.converter.support.AllEncompassingFormHttpMessageConverter;
3031
import org.springframework.http.converter.xml.AbstractXmlHttpMessageConverter;
3132
import org.springframework.http.converter.xml.MappingJackson2XmlHttpMessageConverter;
@@ -121,14 +122,24 @@ private List<HttpMessageConverter<?>> getCombinedConverters(Collection<HttpMessa
121122
List<HttpMessageConverter<?>> processing = new ArrayList<>(converters);
122123
for (HttpMessageConverter<?> defaultConverter : defaultConverters) {
123124
Iterator<HttpMessageConverter<?>> iterator = processing.iterator();
125+
boolean skipDefault = false;
124126
while (iterator.hasNext()) {
125127
HttpMessageConverter<?> candidate = iterator.next();
126128
if (isReplacement(defaultConverter, candidate)) {
127129
combined.add(candidate);
128130
iterator.remove();
131+
132+
if (defaultConverter instanceof StringHttpMessageConverter
133+
&& defaultConverter.getSupportedMediaTypes().equals(candidate.getSupportedMediaTypes())) {
134+
skipDefault = true;
135+
}
129136
}
130137
}
131-
combined.add(defaultConverter);
138+
139+
if (!skipDefault) {
140+
combined.add(defaultConverter);
141+
}
142+
132143
if (defaultConverter instanceof AllEncompassingFormHttpMessageConverter allEncompassingConverter) {
133144
configurePartConverters(allEncompassingConverter, converters);
134145
}

spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/http/HttpMessageConvertersTests.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616

1717
package org.springframework.boot.autoconfigure.http;
1818

19+
import java.nio.charset.StandardCharsets;
1920
import java.util.ArrayList;
2021
import java.util.Collection;
2122
import java.util.List;
@@ -163,4 +164,19 @@ private AllEncompassingFormHttpMessageConverter findFormConverter(Collection<Htt
163164
return null;
164165
}
165166

167+
@Test
168+
void replaceDefaultStringHttpConverter() {
169+
StringHttpMessageConverter converter = new StringHttpMessageConverter(StandardCharsets.UTF_8);
170+
HttpMessageConverters converters = new HttpMessageConverters(converter);
171+
assertThat(converters.getConverters()).contains(converter);
172+
List<StringHttpMessageConverter> httpConverters = new ArrayList<>();
173+
for (HttpMessageConverter<?> candidate : converters) {
174+
if (candidate instanceof StringHttpMessageConverter) {
175+
httpConverters.add((StringHttpMessageConverter) candidate);
176+
}
177+
}
178+
179+
assertThat(httpConverters).hasSize(1);
180+
assertThat(httpConverters.get(0)).isEqualTo(converter);
181+
}
166182
}

0 commit comments

Comments
 (0)