Ami*_*mar 8 rest-client resttemplate java-8 spring-boot spring-webclient
我试图为我的休息客户端设置标题,但每次我必须写
webclient.get().uri("blah-blah")
.header("key1", "value1")
.header("key2", "value2")...
Run Code Online (Sandbox Code Playgroud)
如何使用 headers() 方法同时设置所有标题?
Bri*_*zel 16
如果这些标头在每个请求的基础上发生变化,您可以使用:
webClient.get().uri("/resource").headers(httpHeaders -> {
httpHeaders.setX("");
httpHeaders.setY("");
});
Run Code Online (Sandbox Code Playgroud)
这不会节省太多打字时间;因此,对于不会从一个请求更改为另一个请求的标头,您可以在构建客户端时将它们设置为默认标头:
WebClient webClient = WebClient.builder().defaultHeader("...", "...").build();
WebClient webClient = WebClient.builder().defaultHeaders(httpHeaders -> {
httpHeaders.setX("");
httpHeaders.setY("");
}).build();
Run Code Online (Sandbox Code Playgroud)
消费者是正确的,尽管很难想象,尤其是。因为在完成标头工作后,您可以继续在 Web 客户端构造中进行其他流畅组合方法调用。
....假设您有一个 HttpHeaders (或 MutliValue 映射)将您的标头保留在范围内。这是一个使用 Spring Cloud Gateway 中的交换对象的示例:
final HttpHeaders headersFromExchangeRequest = exchange.getRequest().headers();
webclient.get().uri("blah-blah")
.headers( httpHeadersOnWebClientBeingBuilt -> {
httpHeadersOnWebClientBeingBuilt.addAll( headersFromExchangeRequest );
}
)...
Run Code Online (Sandbox Code Playgroud)
addAll 可以采用多值映射。如果这是有道理的。如果没有,请让您的 IDE 为您提供指导。
为了让消费者更清楚,我们将上面的内容改写如下:
private Consumer<HttpHeaders> getHttpHeadersFromExchange(ServerWebExchange exchange) {
return httpHeaders -> {
httpHeaders.addAll(exchange.getRequest().getHeaders());
};
}
.
.
.
webclient.get().uri("blah-blah")
.headers(getHttpHeadersFromExchange(exchange))
...
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
22261 次 |
最近记录: |