parent
c7413cbdfc
commit
9ef4ceb047
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue