34. 使用WebClient调用REST服务
如果你的classpath上有Spring WebFlux,那么你还可以选择使用WebClient
来调用远程REST服务,与RestTemplate
相比,这个客户端具有更强的功能性,并且完全具有响应性。你可以使用builder,WebClient.create()
创建自己的客户端实例,请参阅有关WebClient的部分。
Spring Boot为你创建并预先配置这样的构建器,例如,客户端HTTP编解码器的配置方式与服务器编解码器的配置方式相同(请参阅WebFlux HTTP编解码器自动配置)。
下面的代码展示了一个典型的例子:
@Service
public class MyService {
private final WebClient webClient;
public MyService(WebClient.Builder webClientBuilder) {
this.webClient = webClientBuilder.baseUrl("http://example.org").build();
}
public Mono<Details> someRestCall(String name) {
return this.webClient.get().url("/{name}/details", name)
.retrieve().bodyToMono(Details.class);
}
}
34.1 WebClient定制
WebClient
定制有三种主要方法,这取决于你希望定制的应用范围有多广。
要使任何定制的范围尽可能狭窄,请注入自动配置的WebClient.Builder
,然后根据需要调用其方法,WebClient.Builder
实例是有状态的:构建器上的任何更改都反映在随后使用它创建的所有客户端中,如果想用同一个构建器创建多个客户端,还可以考虑使用WebClient.Builder other = builder.clone();
克隆构建器。
为所有WebClient.Builder
实例进行应用程序级的附加定制,你可以声明WebClientCustomizer
bean并在注入点局部的更改WebClient.Builder
。
最后,你可以回到原来的API并使用WebClient.create()
,在这种情况下,不应用自动配置或WebClientCustomizer
。