Skip to content
Advertisement

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?

Advertisement

Answer

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();
Advertisement