mirror of
https://github.com/spring-projects/spring-boot.git
synced 2026-09-30 22:39:06 +00:00
Restore HttpMessageConverters ordering
Temporarily add reordering logic to `HttpMessageConverters` to restore the Spring Boot 3.5 order. See gh-46221
This commit is contained in:
+30
-2
@@ -26,8 +26,11 @@ import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import org.springframework.http.converter.HttpMessageConverter;
|
||||
import org.springframework.http.converter.cbor.MappingJackson2CborHttpMessageConverter;
|
||||
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
|
||||
import org.springframework.http.converter.support.AllEncompassingFormHttpMessageConverter;
|
||||
import org.springframework.http.converter.xml.AbstractXmlHttpMessageConverter;
|
||||
import org.springframework.http.converter.xml.MappingJackson2XmlHttpMessageConverter;
|
||||
import org.springframework.util.ClassUtils;
|
||||
import org.springframework.web.client.RestTemplate;
|
||||
import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;
|
||||
@@ -184,13 +187,14 @@ public class HttpMessageConverters implements Iterable<HttpMessageConverter<?>>
|
||||
List<HttpMessageConverter<?>> converters = new ArrayList<>();
|
||||
if (ClassUtils.isPresent("org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport",
|
||||
null)) {
|
||||
converters.addAll(new WebMvcConfigurationSupport() {
|
||||
List<HttpMessageConverter<?>> webMvcConverters = new WebMvcConfigurationSupport() {
|
||||
|
||||
public List<HttpMessageConverter<?>> defaultMessageConverters() {
|
||||
return super.getMessageConverters();
|
||||
}
|
||||
|
||||
}.defaultMessageConverters());
|
||||
}.defaultMessageConverters();
|
||||
converters.addAll(reorderAllEncompassingFormHttpMessageConverterBeforeJackson(webMvcConverters));
|
||||
}
|
||||
else {
|
||||
converters.addAll(new RestTemplate().getMessageConverters());
|
||||
@@ -199,6 +203,30 @@ public class HttpMessageConverters implements Iterable<HttpMessageConverter<?>>
|
||||
return converters;
|
||||
}
|
||||
|
||||
@SuppressWarnings("removal")
|
||||
private List<HttpMessageConverter<?>> reorderAllEncompassingFormHttpMessageConverterBeforeJackson(
|
||||
List<HttpMessageConverter<?>> converters) {
|
||||
List<HttpMessageConverter<?>> reordered = new ArrayList<>();
|
||||
for (int i = 0; i < converters.size(); i++) {
|
||||
HttpMessageConverter<?> converter = converters.get(i);
|
||||
if (converter == null) {
|
||||
continue;
|
||||
}
|
||||
if (converter instanceof MappingJackson2XmlHttpMessageConverter
|
||||
|| converter instanceof MappingJackson2HttpMessageConverter
|
||||
|| converter instanceof MappingJackson2CborHttpMessageConverter) {
|
||||
for (int j = i; j < converters.size(); j++) {
|
||||
if (converters.get(j) instanceof AllEncompassingFormHttpMessageConverter) {
|
||||
reordered.add(converters.get(j));
|
||||
converters.set(j, null);
|
||||
}
|
||||
}
|
||||
}
|
||||
reordered.add(converter);
|
||||
}
|
||||
return reordered;
|
||||
}
|
||||
|
||||
@SuppressWarnings("removal")
|
||||
private void reorderXmlConvertersToEnd(List<HttpMessageConverter<?>> converters) {
|
||||
List<HttpMessageConverter<?>> xml = new ArrayList<>();
|
||||
|
||||
+6
-6
@@ -56,9 +56,9 @@ class HttpMessageConvertersTests {
|
||||
}
|
||||
assertThat(converterClasses).containsExactly(ByteArrayHttpMessageConverter.class,
|
||||
StringHttpMessageConverter.class, ResourceHttpMessageConverter.class,
|
||||
ResourceRegionHttpMessageConverter.class, MappingJackson2HttpMessageConverter.class,
|
||||
MappingJackson2CborHttpMessageConverter.class, MappingJackson2YamlHttpMessageConverter.class,
|
||||
AllEncompassingFormHttpMessageConverter.class, MappingJackson2XmlHttpMessageConverter.class);
|
||||
ResourceRegionHttpMessageConverter.class, AllEncompassingFormHttpMessageConverter.class,
|
||||
MappingJackson2HttpMessageConverter.class, MappingJackson2CborHttpMessageConverter.class,
|
||||
MappingJackson2YamlHttpMessageConverter.class, MappingJackson2XmlHttpMessageConverter.class);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -126,9 +126,9 @@ class HttpMessageConvertersTests {
|
||||
}
|
||||
assertThat(converterClasses).containsExactly(ByteArrayHttpMessageConverter.class,
|
||||
StringHttpMessageConverter.class, ResourceHttpMessageConverter.class,
|
||||
ResourceRegionHttpMessageConverter.class, MappingJackson2HttpMessageConverter.class,
|
||||
MappingJackson2CborHttpMessageConverter.class, MappingJackson2YamlHttpMessageConverter.class,
|
||||
AllEncompassingFormHttpMessageConverter.class);
|
||||
ResourceRegionHttpMessageConverter.class, AllEncompassingFormHttpMessageConverter.class,
|
||||
MappingJackson2HttpMessageConverter.class, MappingJackson2CborHttpMessageConverter.class,
|
||||
MappingJackson2YamlHttpMessageConverter.class);
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
Reference in New Issue
Block a user