在Spring Boot 1.5.x中,我可以将拦截器与AsyncRestTemplate
一起使用,以将来自传入请求的标头捕获到RestController
端点,并将其放在通过{发出的任何exchange
请求中{1}}。
我看不到AsyncRestTemplate
如何使用。看起来,如果您构建WebClient
,其所有标头等都已设置且不可更改:
WebClient
虽然我可以使用WebClient client = WebClient.builder()
.baseUrl( "http://blah.com" )
.defaultHeader( "Authorization", "Bearer ey..." )
.build();
进行更改,但可以实例化一个全新的WebClient对象。我希望不必在每个请求上都创建一个新请求。没有办法保留client.mutate()
并具有按请求的标头和其他参数吗?
每次强制创建一个新对象似乎是一大浪费,而且性能很差。
答案 0 :(得分:1)
这里使用的是应该为此WebClient
实例发送的所有请求发送的默认标头。因此,这对于通用标头很有用。
您当然可以像这样按每个请求更改请求标头:
Mono<String> result = this.webClient.get()
.uri("/greeting")
.header("Something", "value")
.retrieve().bodyToMono(String.class);
如果您希望具有类似拦截器的机制来在发送请求之前对其进行更改,则可以使用过滤器配置WebClient
实例:
WebClient
.builder()
.filter((request, next) -> {
// you can mutate the request before sending it
ClientRequest newRequest = ClientRequest.from(request)
.header("Something", "value").build();
return next.exchange(newRequest);
})