我试着给我的rest客户端设置头文件,但每次我都要写
webclient.get().uri("blah-blah")
.header("key1", "value1")
.header("key2", "value2")...
如何使用headers()方法同时设置所有头部?
发布于 2019-12-05 17:29:33
如果这些标头在每个请求的基础上发生变化,您可以使用:
webClient.get().uri("/resource").headers(httpHeaders -> {
httpHeaders.setX("");
httpHeaders.setY("");
});
这不会节省太多的输入;因此,对于不会从一个请求更改到另一个请求的标头,您可以在构建客户端时将其设置为默认标头:
WebClient webClient = WebClient.builder().defaultHeader("...", "...").build();
WebClient webClient = WebClient.builder().defaultHeaders(httpHeaders -> {
httpHeaders.setX("");
httpHeaders.setY("");
}).build();
发布于 2020-09-29 07:56:41
消费者是正确的,尽管很难想象,尤其是。在完成头文件的工作后,您可以继续在webclient构造中调用其他fluent-composition方法。
....suppose您有一个HttpHeaders (或MutliValue映射)在作用域中保存您的标头。下面是一个使用来自spring cloud gateway的exchange对象的示例:
final HttpHeaders headersFromExchangeRequest = exchange.getRequest().headers();
webclient.get().uri("blah-blah")
.headers( httpHeadersOnWebClientBeingBuilt -> {
httpHeadersOnWebClientBeingBuilt.addAll( headersFromExchangeRequest );
}
)...
addAll可以接受多值映射。如果这有意义的话。如果没有,让您的IDE作为您的指南。
为了让消费者更清楚,我们将上面的代码重写如下:
private Consumer<HttpHeaders> getHttpHeadersFromExchange(ServerWebExchange exchange) {
return httpHeaders -> {
httpHeaders.addAll(exchange.getRequest().getHeaders());
};
}
.
.
.
webclient.get().uri("blah-blah")
.headers(getHttpHeadersFromExchange(exchange))
...
发布于 2021-12-29 00:13:26
我发现这个问题再次出现在我身上,这次我直接使用WebClient编写groovy。同样,我尝试驱动的示例是使用Consumer作为headers方法调用的参数。
在groovy中,额外问题是groovy闭包语法和java lambda语法都使用->
。
groovy版本在这里:
def mvmap = new LinkedMultiValueMap<>(headersAsMap)
def consumer = { it -> it.addAll(mvmap) } as Consumer<HttpHeaders>
WebClient client = WebClient.create(baseUrlAsString)
def resultAsMono = client.post()
.uri(uriAsString).accept(MediaType.APPLICATION_JSON)
.headers(consumer)
.body(Mono.just(payload), HashMap.class)
.retrieve()
.toEntity(HashMap.class)
java版本如下:
LinkedMultiValueMap mvmap = new LinkedMultiValueMap<>(headersAsMap);
Consumer<HttpHeaders> consumer = it -> it.addAll(mvmap);
WebClient client = WebClient.create(baseUrlAsString);
Mono<ResponseEntity<HashMap>> resultAsMono = client.post()
.uri(uriAsString).accept(MediaType.APPLICATION_JSON)
.headers(consumer)
.body(Mono.just(payload), HashMap.class)
.retrieve()
.toEntity(HashMap.class);
https://stackoverflow.com/questions/59133508
复制相似问题