Search code examples
javaspringspring-bootwebclientspring-webflux

WebClient - adding defaultHeaders


I'm trying to put multiple headers into defaultHeaders(), But I don't have idea how to create Consumer object from return of createHeaders() method

this.someWebClient = WebClient.builder()
        .baseUrl(someConfiguration.getApiUrl())
        .clientConnector(buildTimeoutConnector())
        .defaultHeaders(????) // Consumer<HttpHeaders>
        .build();

I can build my header in that way:

private HttpHeaders createHeaders(String token) {
    HttpHeaders headers = new HttpHeaders();
    headers.add(HttpHeaders.ACCEPT, V1_PUBLIC);
    headers.add(HttpHeaders.HOST, "abc");
    headers.add(HttpHeaders.AUTHORIZATION, "Bearer " + token);
    return headers;
}

but how to wrap it into Consumer?


Solution

  • Clearly the method doc says that it needs a Consumer of some Type. So you can create an anonymous class implementing the Consumer interface or use lambda expression like this:

    1. Using anonymous inner class:
    this.someWebClient = WebClient.builder()
            .baseUrl(someConfiguration.getApiUrl())
            .clientConnector(buildTimeoutConnector())
            .defaultHeaders(new Consumer<HttpHeaders>() {
              @Override
              public void accept(HttpHeaders httpHeaders) {
                httpHeaders.addAll(createHeaders(token));
              }
            })
            .build();
    
    1. Using lambda:
    this.someWebClient = WebClient.builder()
            .baseUrl(someConfiguration.getApiUrl())
            .clientConnector(buildTimeoutConnector())
            .defaultHeaders(httpHeaders -> {
              httpHeaders.addAll(createHeaders(token));
            })
            .build();