Deep dive into Spring Reactive WebClient

man holding white teacup in front of gray laptop
Reading Time: 3 minutes


Spring Reactive WebClient is a non-blocking, reactive HTTP client that can be used to consume RESTful web services. It provides an easy-to-use and efficient way to communicate with remote APIs, allowing you to perform asynchronous and reactive programming. In this blog, we will discuss how Spring Reactive WebClient works and how you can use it to consume RESTful web services.

If we talk about the traditional blocking HTTP client, the request is sent to the server and the client waits for the server to respond before continuing execution. In contrast, a non-blocking HTTP client doesn’t wait for the server to respond, but instead returns immediately and processes the response when it’s available.

The Spring WebClient uses the reactive programming model to achieve non-blocking I/O. It’s built on top of Reactor, a reactive programming library, which provides a set of abstractions for dealing with asynchronous data streams.

Reactive Programming

Before diving into the details of Spring Reactive WebClient, let’s briefly discuss reactive programming. Reactive programming is a programming paradigm that enables developers to write non-blocking, asynchronous code that reacts to events as they occur. In reactive programming, data flows through a system in response to asynchronous events, and processing is done in a reactive way. Reactive programming is well-suited for applications that require high concurrency and responsiveness, such as web applications.

Spring Reactive WebClient

Spring Reactive WebClient is built on top of the reactive core of Spring WebFlux. It provides a simple and efficient way to consume RESTful web services using reactive programming techniques. WebClient is a non-blocking, reactive HTTP client that allows you to send HTTP requests and receive HTTP responses asynchronously. You can use it to perform GET, POST, PUT, DELETE, and other HTTP operations.

WebClient uses Reactor, a reactive library, to provide a fluent, reactive API. It allows you to compose reactive streams of data, map, filter, and transform data, and apply backpressure to control the rate of data flow. WebClient is designed to be lightweight, scalable, and efficient, and it can be used in both reactive and non-reactive Spring applications.

How can we use Spring Reactive WebClient

To use Spring Reactive WebClient, you first need to create an instance of the WebClient class. You can configure WebClient by setting options such as timeouts, connection pooling, and default headers. Here’s an example:

WebClient webClient = WebClient.builder()


    .defaultHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE)


Once you have created a WebClient instance, you can use it to send HTTP requests and receive HTTP responses. WebClient provides several methods for sending HTTP requests, including get(), post(), put(), and delete(). Each of these methods returns a Mono<ClientResponse> object, which represents a reactive stream of HTTP responses.

Here’s an example of sending a GET request using WebClient:

Mono<ClientResponse> responseMono = webClient.get()

    .uri("/users/{id}", 1)


    .onStatus(HttpStatus::is4xxClientError, response -> Mono.error(new RuntimeException("Client error")))

    .onStatus(HttpStatus::is5xxServerError, response -> Mono.error(new RuntimeException("Server error")))


In this example, we’re sending a GET request to retrieve a user with ID 1. We’re using the uri() method to specify the URI of the resource we want to access. We’re then calling the retrieve() method to send the request and receive the response.

The onStatus() the method is used to handle HTTP status codes. In this example, we’re checking if the response status code is in the 4xx or 5xx range and throwing an exception if it is. We’re then calling the bodyToMono() method to convert the HTTP response body to a Mono of type String.


In summary,

In conclusion, Spring Reactive WebClient is a powerful and efficient way to consume RESTful web services using reactive programming techniques. It provides a fluent and easy-to-use API for sending HTTP requests and receiving HTTP responses asynchronously. I will be covering more topics on Reactive Programming in my future blogs, stay connected. Happy learning 🙂

For more, you can refer to the Reactive documentation:

For a more technical blog, you can refer to the Knoldus blog

Written by 

Hello! Currently, I am Software Consultant at Knoldus Inc. I have completed my B.Tech from Abdul Kalam Technical University. Right now I am focusing on JAVA Frameworks. Apart from that my hobbies are playing guitar and listening to music.