Ask Your Question

Revision history [back]

To extract information from a Mono returned from Webflux and set it as a header, you can use the doOnNext operator to extract the desired information from the Mono and set it as a header using the ServerWebExchange.getResponse().getHeaders().set() method. Here's an example:

public Mono<ServerResponse> handleRequest(ServerRequest request) {
    Mono<String> dataMono = Mono.just("Hello World");

    return dataMono.flatMap(data -> {
        // Extract information from `data` and set it as a header
        String info = extractInfo(data);
        request.exchange().getResponse().getHeaders().set("X-Info", info);

        // Return the response with the original data
        return ServerResponse.ok().body(BodyInserters.fromObject(data));
    });
}

private String extractInfo(String data) {
    // Extract the desired information from `data`
    // In this example, we're just returning the length of the string
    return Integer.toString(data.length());
}

In this example, we're using a dataMono Mono to represent the data that we'll be extracting information from. We call the flatMap operator to extract the information and set it as a header.

Inside the flatMap, we extract the information from the data variable using the extractInfo method. We then use request.exchange().getResponse().getHeaders().set() to set the header with the extracted information.

Finally, we return a ServerResponse object with the original data using ServerResponse.ok().body(BodyInserters.fromObject(data)). The response object is automatically serialized and returned to the client with the X-Info header containing the extracted information.