Skip to content

Add methods to connector and request factory builds to apply pre-packaged customizations #47205

@mateusz-nalepa

Description

@mateusz-nalepa

Hey!

Spring Boot 4.0.0-SNAPSHOT

Interface WebClient.Builder has method apply(). It would be fine, to see it also for ClientHttpConnectorBuilder ❤️
Current methods starting with prefix with doesn't accept Consumer<ReactorClientHttpConnectorBuilder> as a paremeter.

For global customizers I can use WebClientCustomizer and ClientHttpConnectorBuilderCustomizer but I want apply some specific configuration per given WebClient

class WebClientConfig {

	private final WebClient.Builder webClientBuilder;

	private final ReactorClientHttpConnectorBuilder reactorClientHttpConnectorBuilder;

	private final SpecificWebClientInstanceConfig specificWebClientInstanceConfig;

	WebClientConfig(WebClient.Builder webClientBuilder, ReactorClientHttpConnectorBuilder reactorClientHttpConnectorBuilder, SpecificWebClientInstanceConfig specificWebClientInstanceConfig) {
		this.webClientBuilder = webClientBuilder;
		this.reactorClientHttpConnectorBuilder = reactorClientHttpConnectorBuilder;
		this.specificWebClientInstanceConfig = specificWebClientInstanceConfig;
	}


	public WebClient createWebClient() {
		return this.webClientBuilder
				.apply(this.specificWebClientInstanceConfig.applyWebClientDefaults())
				.clientConnector(
						// Current way
						this.specificWebClientInstanceConfig
								.applyReactorConnectorDefaults(this.reactorClientHttpConnectorBuilder)
								.build()
						// Expected way
//						this.reactorClientHttpConnectorBuilder
//								.apply(this.specificWebClientInstanceConfig.applyReactorConnectorDefaults())
//								.build()
				)
				.build();
	}

}

class SpecificWebClientInstanceConfig {

	Consumer<WebClient.Builder> applyWebClientDefaults() {
		return builder -> {
		};
	}

	// current way
	ReactorClientHttpConnectorBuilder applyReactorConnectorDefaults(
			ReactorClientHttpConnectorBuilder reactorClientHttpConnectorBuilder) {
		return reactorClientHttpConnectorBuilder;
	}


	// expected way
	Consumer<ReactorClientHttpConnectorBuilder> applyReactorConnectorDefaults() {
		return builder -> {
		};
	}

}

Please let me know what do you think about this.
I can contribute to this 🫡

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions