Add RestClient.Builder#messageConverters(List)

This commit also introduces the validation of the RestClient
message converters for both variants.

Closes gh-33536
This commit is contained in:
Sébastien Deleuze
2024-09-13 15:40:24 +02:00
parent 0a001482c3
commit d3755aba06
3 changed files with 62 additions and 1 deletions

View File

@@ -19,6 +19,7 @@ package org.springframework.web.client;
import java.net.URI;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
@@ -63,6 +64,7 @@ import org.springframework.web.util.UriTemplateHandler;
*
* @author Arjen Poutsma
* @author Hyoungjune Kim
* @author Sebastien Deleuze
* @since 6.1
*/
final class DefaultRestClientBuilder implements RestClient.Builder {
@@ -358,6 +360,14 @@ final class DefaultRestClientBuilder implements RestClient.Builder {
@Override
public RestClient.Builder messageConverters(Consumer<List<HttpMessageConverter<?>>> configurer) {
configurer.accept(initMessageConverters());
validateConverters(this.messageConverters);
return this;
}
@Override
public RestClient.Builder messageConverters(List<HttpMessageConverter<?>> messageConverters) {
validateConverters(messageConverters);
this.messageConverters = Collections.unmodifiableList(messageConverters);
return this;
}
@@ -413,6 +423,11 @@ final class DefaultRestClientBuilder implements RestClient.Builder {
return this.messageConverters;
}
private void validateConverters(@Nullable List<HttpMessageConverter<?>> messageConverters) {
Assert.notEmpty(messageConverters, "At least one HttpMessageConverter is required");
Assert.noNullElements(messageConverters, "The HttpMessageConverter list must not contain null elements");
}
@Override
public RestClient.Builder clone() {

View File

@@ -73,6 +73,7 @@ import org.springframework.web.util.UriBuilderFactory;
* </ul>
*
* @author Arjen Poutsma
* @author Sebastien Deleuze
* @since 6.1
*/
public interface RestClient {
@@ -399,11 +400,22 @@ public interface RestClient {
/**
* Configure the message converters for the {@code RestClient} to use.
* @param configurer the configurer to apply
* @param configurer the configurer to apply on the list of default
* {@link HttpMessageConverter} pre-initialized
* @return this builder
* @see #messageConverters(List)
*/
Builder messageConverters(Consumer<List<HttpMessageConverter<?>>> configurer);
/**
* Set the message converters for the {@code RestClient} to use.
* @param messageConverters the list of {@link HttpMessageConverter} to use
* @return this builder
* @since 6.2
* @see #messageConverters(Consumer)
*/
Builder messageConverters(List<HttpMessageConverter<?>> messageConverters);
/**
* Configure the {@link io.micrometer.observation.ObservationRegistry} to use
* for recording HTTP client observations.