diff --git a/spring-web/src/main/java/org/springframework/http/converter/DefaultHttpMessageConverters.java b/spring-web/src/main/java/org/springframework/http/converter/DefaultHttpMessageConverters.java index f955acc53857..4922e76bbd0e 100644 --- a/spring-web/src/main/java/org/springframework/http/converter/DefaultHttpMessageConverters.java +++ b/spring-web/src/main/java/org/springframework/http/converter/DefaultHttpMessageConverters.java @@ -217,9 +217,9 @@ private void checkConverterSupports(HttpMessageConverter converter, MediaType throw new IllegalArgumentException("converter should support '" + mediaType + "'"); } - void addCustomMessageConverter(HttpMessageConverter customConverter) { + void addCustomMessageConverter(int index, HttpMessageConverter customConverter) { Assert.notNull(customConverter, "'customConverter' must not be null"); - this.customConverters.add(customConverter); + this.customConverters.add(index, customConverter); } void addMessageConverterConfigurer(Consumer> configurer) { @@ -432,7 +432,13 @@ public ClientBuilder withYamlConverter(HttpMessageConverter yamlConverter) { @Override public ClientBuilder addCustomConverter(HttpMessageConverter customConverter) { - addCustomMessageConverter(customConverter); + addCustomConverter(0, customConverter); + return this; + } + + @Override + public ClientBuilder addCustomConverter(int index, HttpMessageConverter customConverter) { + addCustomMessageConverter(index, customConverter); return this; } @@ -529,7 +535,13 @@ public ServerBuilder withYamlConverter(HttpMessageConverter yamlConverter) { @Override public ServerBuilder addCustomConverter(HttpMessageConverter customConverter) { - addCustomMessageConverter(customConverter); + addCustomMessageConverter(0, customConverter); + return this; + } + + @Override + public ServerBuilder addCustomConverter(int index, HttpMessageConverter customConverter) { + addCustomMessageConverter(0, customConverter); return this; } diff --git a/spring-web/src/main/java/org/springframework/http/converter/HttpMessageConverters.java b/spring-web/src/main/java/org/springframework/http/converter/HttpMessageConverters.java index 61bc33ab9bc4..f7c90d08cf95 100644 --- a/spring-web/src/main/java/org/springframework/http/converter/HttpMessageConverters.java +++ b/spring-web/src/main/java/org/springframework/http/converter/HttpMessageConverters.java @@ -166,6 +166,13 @@ interface Builder> { */ T addCustomConverter(HttpMessageConverter customConverter); + + /** + * Add a custom {@code HttpMessageConverter} to the list of converters, at the specified index, pushing all existing message converters forward one. + * @param customConverter the converter instance to add + */ + T addCustomConverter(int index, HttpMessageConverter customConverter); + /** * Add a consumer for configuring the selected message converters. * @param configurer the configurer to use