From d057eb2e5d2b6cf6801f6f8a45bf1791405b2f6a Mon Sep 17 00:00:00 2001 From: rstoyanchev Date: Mon, 6 Oct 2025 16:15:49 +0100 Subject: [PATCH] Improve converter config in RestTestClient.Builder Compose consumers and apply them together from the build method to allow multiple parties to supply consumers that collaborate on the same HttpMessageConverters.Builder. See gh-35578 --- .../client/DefaultRestTestClientBuilder.java | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/spring-test/src/main/java/org/springframework/test/web/servlet/client/DefaultRestTestClientBuilder.java b/spring-test/src/main/java/org/springframework/test/web/servlet/client/DefaultRestTestClientBuilder.java index 86daf781231..c54170a4e9a 100644 --- a/spring-test/src/main/java/org/springframework/test/web/servlet/client/DefaultRestTestClientBuilder.java +++ b/spring-test/src/main/java/org/springframework/test/web/servlet/client/DefaultRestTestClientBuilder.java @@ -19,6 +19,8 @@ package org.springframework.test.web.servlet.client; import java.util.List; import java.util.function.Consumer; +import org.jspecify.annotations.Nullable; + import org.springframework.http.HttpHeaders; import org.springframework.http.client.ClientHttpRequestFactory; import org.springframework.http.client.ClientHttpRequestInterceptor; @@ -53,6 +55,8 @@ class DefaultRestTestClientBuilder> implemen private final RestClient.Builder restClientBuilder; + private @Nullable Consumer convertersConfigurer; + private Consumer> entityResultConsumer = result -> {}; @@ -66,6 +70,7 @@ class DefaultRestTestClientBuilder> implemen DefaultRestTestClientBuilder(DefaultRestTestClientBuilder other) { this.restClientBuilder = other.restClientBuilder.clone(); + this.convertersConfigurer = other.convertersConfigurer; this.entityResultConsumer = other.entityResultConsumer; } @@ -132,7 +137,8 @@ class DefaultRestTestClientBuilder> implemen @Override public T configureMessageConverters(Consumer configurer) { - this.restClientBuilder.configureMessageConverters(configurer); + this.convertersConfigurer = (this.convertersConfigurer != null ? + this.convertersConfigurer.andThen(configurer) : configurer); return self(); } @@ -154,6 +160,11 @@ class DefaultRestTestClientBuilder> implemen @Override public RestTestClient build() { + + if (this.convertersConfigurer != null) { + this.restClientBuilder.configureMessageConverters(this.convertersConfigurer); + } + return new DefaultRestTestClient( this.restClientBuilder, this.entityResultConsumer, new DefaultRestTestClientBuilder<>(this)); }