26
26
import java .util .Map ;
27
27
28
28
import org .springframework .http .converter .HttpMessageConverter ;
29
+ import org .springframework .http .converter .cbor .MappingJackson2CborHttpMessageConverter ;
30
+ import org .springframework .http .converter .json .MappingJackson2HttpMessageConverter ;
29
31
import org .springframework .http .converter .support .AllEncompassingFormHttpMessageConverter ;
30
32
import org .springframework .http .converter .xml .AbstractXmlHttpMessageConverter ;
33
+ import org .springframework .http .converter .xml .MappingJackson2XmlHttpMessageConverter ;
31
34
import org .springframework .util .ClassUtils ;
32
35
import org .springframework .web .client .RestTemplate ;
33
36
import org .springframework .web .servlet .config .annotation .WebMvcConfigurationSupport ;
@@ -184,13 +187,14 @@ private List<HttpMessageConverter<?>> getDefaultConverters() {
184
187
List <HttpMessageConverter <?>> converters = new ArrayList <>();
185
188
if (ClassUtils .isPresent ("org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport" ,
186
189
null )) {
187
- converters . addAll ( new WebMvcConfigurationSupport () {
190
+ List < HttpMessageConverter <?>> webMvcConverters = new WebMvcConfigurationSupport () {
188
191
189
192
public List <HttpMessageConverter <?>> defaultMessageConverters () {
190
193
return super .getMessageConverters ();
191
194
}
192
195
193
- }.defaultMessageConverters ());
196
+ }.defaultMessageConverters ();
197
+ converters .addAll (reorderAllEncompassingFormHttpMessageConverterBeforeJackson (webMvcConverters ));
194
198
}
195
199
else {
196
200
converters .addAll (new RestTemplate ().getMessageConverters ());
@@ -199,6 +203,30 @@ public List<HttpMessageConverter<?>> defaultMessageConverters() {
199
203
return converters ;
200
204
}
201
205
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
+
202
230
@ SuppressWarnings ("removal" )
203
231
private void reorderXmlConvertersToEnd (List <HttpMessageConverter <?>> converters ) {
204
232
List <HttpMessageConverter <?>> xml = new ArrayList <>();
0 commit comments