WebClient - 添加 defaultHeaders
Posted
技术标签:
【中文标题】WebClient - 添加 defaultHeaders【英文标题】:WebClient - adding defaultHeaders 【发布时间】:2020-11-18 00:26:00 【问题描述】:我正在尝试将多个标头放入 defaultHeaders(),但我不知道如何从 createHeaders() 方法的返回创建 Consumer 对象
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;
但是如何将其包装到 Consumer 中?
【问题讨论】:
【参考方案1】:使用这个。
@Bean
public WebClient webClientConfiguration()
return WebClient
.builder()
.clientConnector(new ReactorClientHttpConnector(HttpClient.create()
.option(ChannelOption.CONNECT_TIMEOUT_MILLIS, connectionTimeout)
.responseTimeout(Duration.ofMillis(responseTimeout))
))
.baseUrl(this.msConfigProperties.getApiUrl())
.defaultHeaders(httpHeaders())
.build();
然后是消费者函数
private Consumer<HttpHeaders> httpHeaders()
return headers ->
headers.set(HEADER_CONTENT_TYPE, String.valueOf(MediaType.APPLICATION_JSON));
headers.setBasicAuth(this.msConfigProperties.getUserName(),this.msConfigProperties.getPassword());
headers.set(HEADER_ACCEPT_ENCODING, String.valueOf(MediaType.APPLICATION_JSON));
;
【讨论】:
【参考方案2】:很明显,方法文档说它需要某种类型的Consumer
。因此,您可以创建一个实现Consumer
接口的匿名类 或像这样使用 lambda 表达式:
-
使用匿名内部类:
this.someWebClient = WebClient.builder()
.baseUrl(someConfiguration.getApiUrl())
.clientConnector(buildTimeoutConnector())
.defaultHeaders(new Consumer<HttpHeaders>()
@Override
public void accept(HttpHeaders httpHeaders)
httpHeaders.addAll(createHeaders(token));
)
.build();
-
使用 lambda:
this.someWebClient = WebClient.builder()
.baseUrl(someConfiguration.getApiUrl())
.clientConnector(buildTimeoutConnector())
.defaultHeaders(httpHeaders ->
httpHeaders.addAll(createHeaders(token));
)
.build();
【讨论】:
【参考方案3】:你可以这样做:
WebClient client3 = WebClient
.builder()
.baseUrl(someConfiguration.getApiUrl())
.clientConnector(buildTimeoutConnector())
.defaultHeader(HttpHeaders.ACCEPT, V1_PUBLIC)
.defaultHeader(HttpHeaders.HOST, "abc")
.defaultHeader(HttpHeaders.AUTHORIZATION, "Bearer " + token)
.build();
【讨论】:
以上是关于WebClient - 添加 defaultHeaders的主要内容,如果未能解决你的问题,请参考以下文章