首页 > 解决方案 > WebClient - 添加 defaultHeaders

问题描述

我正在尝试将多个标头放入 defaultHeaders(),但我不知道如何从 createHeaders() 方法的返回中创建消费者对象

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

我可以用这种方式构建我的标题:

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;
}

但是如何将它包装到消费者中?

标签: javaspringspring-bootwebclientspring-webflux

解决方案


显然,方法文档说它需要Consumer某种类型。因此,您可以创建一个实现接口的匿名类Consumer使用 lambda 表达式,如下所示

  1. 使用匿名内部类:
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. 使用 lambda:
this.someWebClient = WebClient.builder()
        .baseUrl(someConfiguration.getApiUrl())
        .clientConnector(buildTimeoutConnector())
        .defaultHeaders(httpHeaders -> {
          httpHeaders.addAll(createHeaders(token));
        })
        .build();

推荐阅读