Polishing contribution

Closes gh-36083
This commit is contained in:
Brian Clozel 2026-01-07 14:23:33 +01:00
parent c7413cbdfc
commit 9ef4ceb047
3 changed files with 29 additions and 49 deletions

View File

@ -229,7 +229,8 @@ class DefaultHttpMessageConverters implements HttpMessageConverters {
}
void addMessageConvertersListConfigurer(Consumer<List<HttpMessageConverter<?>>> configurer) {
this.convertersListConfigurer = (this.convertersListConfigurer != null) ? this.convertersListConfigurer.andThen(this.convertersListConfigurer) : configurer;
this.convertersListConfigurer = (this.convertersListConfigurer != null) ?
this.convertersListConfigurer.andThen(this.convertersListConfigurer) : configurer;
}
List<HttpMessageConverter<?>> getBaseConverters() {
@ -475,13 +476,12 @@ class DefaultHttpMessageConverters implements HttpMessageConverters {
if (this.registerDefaults) {
allConverters.addAll(this.getCoreConverters());
}
if (this.configurer != null) {
allConverters.forEach(this.configurer);
}
if (this.convertersListConfigurer != null) {
this.convertersListConfigurer.accept(allConverters);
}
if (this.configurer != null) {
allConverters.forEach(this.configurer);
}
return new DefaultHttpMessageConverters(allConverters);
}
}
@ -586,13 +586,12 @@ class DefaultHttpMessageConverters implements HttpMessageConverters {
if (this.registerDefaults) {
allConverters.addAll(this.getCoreConverters());
}
if (this.configurer != null) {
allConverters.forEach(this.configurer);
}
if (this.convertersListConfigurer != null) {
this.convertersListConfigurer.accept(allConverters);
}
if (this.configurer != null) {
allConverters.forEach(this.configurer);
}
return new DefaultHttpMessageConverters(allConverters);
}
}

View File

@ -167,18 +167,21 @@ public interface HttpMessageConverters extends Iterable<HttpMessageConverter<?>>
*/
T addCustomConverter(HttpMessageConverter<?> customConverter);
/**
* Add a consumer for mutating the list of selected message converters.
* <p>This operation happens before converters are
* {@link #configureMessageConverters(Consumer) configured individually}.</p>
* @param configurer the configurer to use
* @since 7.0.3
*/
T configureMessageConvertersList(Consumer<List<HttpMessageConverter<?>>> configurer);
/**
* Add a consumer for configuring the selected message converters.
* @param configurer the configurer to use
*/
T configureMessageConverters(Consumer<HttpMessageConverter<?>> configurer);
/**
* Add a consumer for configuring the message converters list just before it's returned.
* @param configurer the configurer to use
*/
T configureMessageConvertersList(Consumer<List<HttpMessageConverter<?>>> configurer);
/**
* Build and return the {@link HttpMessageConverters} instance configured by this builder.
*/

View File

@ -17,11 +17,9 @@
package org.springframework.http.converter;
import java.io.IOException;
import java.util.Comparator;
import java.util.stream.Stream;
import java.util.stream.StreamSupport;
import org.assertj.core.util.Lists;
import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.params.ParameterizedTest;
@ -214,24 +212,14 @@ class DefaultHttpMessageConvertersTests {
}
@Test
void shouldConfigureConverterOrder() {
void shouldAppendCustomConverterToList() {
var customConverter = new CustomHttpMessageConverter();
var converted = HttpMessageConverters.forClient()
.addCustomConverter(customConverter)
.configureMessageConvertersList(converter -> converter.sort(Comparator.comparing(s -> s.getClass().equals(CustomHttpMessageConverter.class) ? 1 : -1))).build();
var messageConvertersBack = Lists.newArrayList(converted);
assertThat(messageConvertersBack.size()).isGreaterThan(1);
assertThat(messageConvertersBack.get(messageConvertersBack.size() - 1).getClass()).isEqualTo(CustomHttpMessageConverter.class);
var convertedFront = HttpMessageConverters.forClient()
.addCustomConverter(customConverter)
.configureMessageConvertersList(converter -> converter.sort(Comparator.comparing(s -> s.getClass().equals(CustomHttpMessageConverter.class) ? -1 : 1))).build();
var messageConvertersFront = Lists.newArrayList(convertedFront);
assertThat(messageConvertersFront.get(0).getClass()).isEqualTo(CustomHttpMessageConverter.class);
assertThat(messageConvertersFront.size()).isGreaterThan(1);
var messageConverters = HttpMessageConverters.forClient()
.registerDefaults()
.configureMessageConvertersList(converters -> converters.add(customConverter))
.build();
assertThat(messageConverters).last().isInstanceOf(CustomHttpMessageConverter.class);
}
}
@ -344,24 +332,14 @@ class DefaultHttpMessageConvertersTests {
}
@Test
void shouldConfigureConverterOrder() {
void shouldAppendCustomConverterToList() {
var customConverter = new CustomHttpMessageConverter();
var converted = HttpMessageConverters.forServer()
.addCustomConverter(customConverter)
.configureMessageConvertersList(converter -> converter.sort(Comparator.comparing(s -> s.getClass().equals(CustomHttpMessageConverter.class) ? 1 : -1))).build();
var messageConvertersBack = Lists.newArrayList(converted);
assertThat(messageConvertersBack.size()).isGreaterThan(1);
assertThat(messageConvertersBack.get(messageConvertersBack.size() - 1).getClass()).isEqualTo(CustomHttpMessageConverter.class);
var convertedFront = HttpMessageConverters.forServer()
.addCustomConverter(customConverter)
.configureMessageConvertersList(converter -> converter.sort(Comparator.comparing(s -> s.getClass().equals(CustomHttpMessageConverter.class) ? -1 : 1))).build();
var messageConvertersFront = Lists.newArrayList(convertedFront);
assertThat(messageConvertersFront.size()).isGreaterThan(1);
assertThat(messageConvertersFront.get(0).getClass()).isEqualTo(CustomHttpMessageConverter.class);
var messageConverters = HttpMessageConverters.forServer()
.registerDefaults()
.configureMessageConvertersList(converters -> converters.add(customConverter))
.build();
assertThat(messageConverters).last().isInstanceOf(CustomHttpMessageConverter.class);
}
}