Skip to content

Commit 9ba450e

Browse files
committed
Closes gh-36043
Signed-off-by: Hayden Rear <hayden.rear@gmail.com>
1 parent e9a4b93 commit 9ba450e

File tree

3 files changed

+35
-4
lines changed

3 files changed

+35
-4
lines changed

spring-web/src/main/java/org/springframework/http/converter/DefaultHttpMessageConverters.java

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -217,9 +217,9 @@ private void checkConverterSupports(HttpMessageConverter<?> converter, MediaType
217217
throw new IllegalArgumentException("converter should support '" + mediaType + "'");
218218
}
219219

220-
void addCustomMessageConverter(HttpMessageConverter<?> customConverter) {
220+
void addCustomMessageConverter(int index, HttpMessageConverter<?> customConverter) {
221221
Assert.notNull(customConverter, "'customConverter' must not be null");
222-
this.customConverters.add(customConverter);
222+
this.customConverters.add(index, customConverter);
223223
}
224224

225225
void addMessageConverterConfigurer(Consumer<HttpMessageConverter<?>> configurer) {
@@ -432,7 +432,13 @@ public ClientBuilder withYamlConverter(HttpMessageConverter<?> yamlConverter) {
432432

433433
@Override
434434
public ClientBuilder addCustomConverter(HttpMessageConverter<?> customConverter) {
435-
addCustomMessageConverter(customConverter);
435+
addCustomConverter(0, customConverter);
436+
return this;
437+
}
438+
439+
@Override
440+
public ClientBuilder addCustomConverter(int index, HttpMessageConverter<?> customConverter) {
441+
addCustomMessageConverter(index, customConverter);
436442
return this;
437443
}
438444

@@ -529,7 +535,13 @@ public ServerBuilder withYamlConverter(HttpMessageConverter<?> yamlConverter) {
529535

530536
@Override
531537
public ServerBuilder addCustomConverter(HttpMessageConverter<?> customConverter) {
532-
addCustomMessageConverter(customConverter);
538+
addCustomMessageConverter(0, customConverter);
539+
return this;
540+
}
541+
542+
@Override
543+
public ServerBuilder addCustomConverter(int index, HttpMessageConverter<?> customConverter) {
544+
addCustomMessageConverter(0, customConverter);
533545
return this;
534546
}
535547

spring-web/src/main/java/org/springframework/http/converter/HttpMessageConverters.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -166,6 +166,13 @@ interface Builder<T extends Builder<T>> {
166166
*/
167167
T addCustomConverter(HttpMessageConverter<?> customConverter);
168168

169+
170+
/**
171+
* Add a custom {@code HttpMessageConverter} to the list of converters, at the specified index, pushing all existing message converters forward one.
172+
* @param customConverter the converter instance to add
173+
*/
174+
T addCustomConverter(int index, HttpMessageConverter<?> customConverter);
175+
169176
/**
170177
* Add a consumer for configuring the selected message converters.
171178
* @param configurer the configurer to use

spring-web/src/test/java/org/springframework/http/converter/DefaultHttpMessageConvertersTests.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,18 @@ void registerCustomMessageConverter() {
147147
assertThat(converters).hasExactlyElementsOfTypes(CustomHttpMessageConverter.class, AllEncompassingFormHttpMessageConverter.class);
148148
}
149149

150+
@Test
151+
void registerCustomMessageConverterAtIndex() {
152+
HttpMessageConverters.ClientBuilder clientBuilder = HttpMessageConverters.forClient()
153+
.addCustomConverter(0, new CustomHttpMessageConverter());
154+
var converters = clientBuilder.build();
155+
assertThat(converters).hasExactlyElementsOfTypes(CustomHttpMessageConverter.class, AllEncompassingFormHttpMessageConverter.class);
156+
157+
clientBuilder.addCustomConverter(0, new CustomHttpMessageConverter());
158+
converters = clientBuilder.build();
159+
assertThat(converters).hasExactlyElementsOfTypes(CustomHttpMessageConverter.class, CustomHttpMessageConverter.class, AllEncompassingFormHttpMessageConverter.class);
160+
}
161+
150162
@Test
151163
void registerCustomMessageConverterAheadOfDefaults() {
152164
var converters = HttpMessageConverters.forClient().registerDefaults()

0 commit comments

Comments
 (0)