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


上一篇:使用RestTemplate调用REST服务
下一篇:验证&发送电子邮件

博弈
2.5k 声望1.5k 粉丝

态度决定一切