Skip to content

Commit fd34f80

Browse files
committed
Restore HttpMessageConverters ordering
Temporarily add reordering logic to `HttpMessageConverters` to restore the Spring Boot 3.5 order. See gh-46221
1 parent 9e16849 commit fd34f80

File tree

2 files changed

+36
-8
lines changed

2 files changed

+36
-8
lines changed

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

Lines changed: 30 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,11 @@
2626
import java.util.Map;
2727

2828
import org.springframework.http.converter.HttpMessageConverter;
29+
import org.springframework.http.converter.cbor.MappingJackson2CborHttpMessageConverter;
30+
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
2931
import org.springframework.http.converter.support.AllEncompassingFormHttpMessageConverter;
3032
import org.springframework.http.converter.xml.AbstractXmlHttpMessageConverter;
33+
import org.springframework.http.converter.xml.MappingJackson2XmlHttpMessageConverter;
3134
import org.springframework.util.ClassUtils;
3235
import org.springframework.web.client.RestTemplate;
3336
import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;
@@ -184,13 +187,14 @@ private List<HttpMessageConverter<?>> getDefaultConverters() {
184187
List<HttpMessageConverter<?>> converters = new ArrayList<>();
185188
if (ClassUtils.isPresent("org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport",
186189
null)) {
187-
converters.addAll(new WebMvcConfigurationSupport() {
190+
List<HttpMessageConverter<?>> webMvcConverters = new WebMvcConfigurationSupport() {
188191

189192
public List<HttpMessageConverter<?>> defaultMessageConverters() {
190193
return super.getMessageConverters();
191194
}
192195

193-
}.defaultMessageConverters());
196+
}.defaultMessageConverters();
197+
converters.addAll(reorderAllEncompassingFormHttpMessageConverterBeforeJackson(webMvcConverters));
194198
}
195199
else {
196200
converters.addAll(new RestTemplate().getMessageConverters());
@@ -199,6 +203,30 @@ public List<HttpMessageConverter<?>> defaultMessageConverters() {
199203
return converters;
200204
}
201205

206+
@SuppressWarnings("removal")
207+
private List<HttpMessageConverter<?>> reorderAllEncompassingFormHttpMessageConverterBeforeJackson(
208+
List<HttpMessageConverter<?>> converters) {
209+
List<HttpMessageConverter<?>> reordered = new ArrayList<>();
210+
for (int i = 0; i < converters.size(); i++) {
211+
HttpMessageConverter<?> converter = converters.get(i);
212+
if (converter == null) {
213+
continue;
214+
}
215+
if (converter instanceof MappingJackson2XmlHttpMessageConverter
216+
|| converter instanceof MappingJackson2HttpMessageConverter
217+
|| converter instanceof MappingJackson2CborHttpMessageConverter) {
218+
for (int j = i; j < converters.size(); j++) {
219+
if (converters.get(j) instanceof AllEncompassingFormHttpMessageConverter) {
220+
reordered.add(converters.get(j));
221+
converters.set(j, null);
222+
}
223+
}
224+
}
225+
reordered.add(converter);
226+
}
227+
return reordered;
228+
}
229+
202230
@SuppressWarnings("removal")
203231
private void reorderXmlConvertersToEnd(List<HttpMessageConverter<?>> converters) {
204232
List<HttpMessageConverter<?>> xml = new ArrayList<>();

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

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -56,9 +56,9 @@ void containsDefaults() {
5656
}
5757
assertThat(converterClasses).containsExactly(ByteArrayHttpMessageConverter.class,
5858
StringHttpMessageConverter.class, ResourceHttpMessageConverter.class,
59-
ResourceRegionHttpMessageConverter.class, MappingJackson2HttpMessageConverter.class,
60-
MappingJackson2CborHttpMessageConverter.class, MappingJackson2YamlHttpMessageConverter.class,
61-
AllEncompassingFormHttpMessageConverter.class, MappingJackson2XmlHttpMessageConverter.class);
59+
ResourceRegionHttpMessageConverter.class, AllEncompassingFormHttpMessageConverter.class,
60+
MappingJackson2HttpMessageConverter.class, MappingJackson2CborHttpMessageConverter.class,
61+
MappingJackson2YamlHttpMessageConverter.class, MappingJackson2XmlHttpMessageConverter.class);
6262
}
6363

6464
@Test
@@ -126,9 +126,9 @@ protected List<HttpMessageConverter<?>> postProcessConverters(List<HttpMessageCo
126126
}
127127
assertThat(converterClasses).containsExactly(ByteArrayHttpMessageConverter.class,
128128
StringHttpMessageConverter.class, ResourceHttpMessageConverter.class,
129-
ResourceRegionHttpMessageConverter.class, MappingJackson2HttpMessageConverter.class,
130-
MappingJackson2CborHttpMessageConverter.class, MappingJackson2YamlHttpMessageConverter.class,
131-
AllEncompassingFormHttpMessageConverter.class);
129+
ResourceRegionHttpMessageConverter.class, AllEncompassingFormHttpMessageConverter.class,
130+
MappingJackson2HttpMessageConverter.class, MappingJackson2CborHttpMessageConverter.class,
131+
MappingJackson2YamlHttpMessageConverter.class);
132132
}
133133

134134
@Test

0 commit comments

Comments
 (0)