前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >微服务架构之Spring Boot(五十八)

微服务架构之Spring Boot(五十八)

作者头像
用户1289394
发布2022-05-23 15:38:43
5600
发布2022-05-23 15:38:43
举报
文章被收录于专栏:Java学习网

35.使用 WebClient 调用REST服务

如果您的类路径上有Spring WebFlux,您还可以选择使用 WebClient 来调用远程REST服务。与 RestTemplate 相比,该客户端具有更多功能

感并且完全被动。您可以在Spring框架文档的专用部分中了解有关 WebClient 的更多信息 。

Spring Boot为您创建并预先配置 WebClient.Builder ; 强烈建议将其注入您的组件并使用它来创建 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().uri("/{name}/details", name)

.retrieve().bodyToMono(Details.class);

}

}

35.1 WebClient运行时

Spring Boot将自动检测用于驱动 WebClient 的 ClientHttpConnector ,具体取决于应用程序类路径上可用的库。目前,支持Reactor Netty

和Jetty RS客户端。

spring-boot-starter-webflux 启动程序默认依赖于 io.projectreactor.netty:reactor-netty ,它带来了服务器和客户端实现。如果您

选择将Jetty用作反应式服务器,则应该在Jetty Reactive HTTP客户端库 org.eclipse.jetty:jetty-reactive-httpclient 上添加依赖项。

对服务器和客户端使用相同的技术具有优势,因为它将自动在客户端和服务器之间共享HTTP资源。

开发人员可以通过提供自定义 ReactorResourceFactory 或 JettyResourceFactory bean覆盖Jetty和Reactor Netty的资源配置 - 这将应用

于客户端和服务器。

如果您希望覆盖客户端的该选项,您可以定义自己的 ClientHttpConnector bean并完全控制客户端配置。

35.2 WebClient自定义

WebClient 自定义有三种主要方法,具体取决于您希望自定义应用的广泛程度。

要使任何自定义的范围尽可能窄,请注入自动配置的 WebClient.Builder ,然后根据需要调用其方法。WebClient.Builder 实例是有状态

的:构建器上的任何更改都会反映在随后使用它创建的所有客户端中。如果要使用相同的构建器创建多个客户端,还可以考虑使

用 WebClient.Builder other = builder.clone(); 克隆构建器。

要对所有 WebClient.Builder 实例进行应用程序范围的附加自定义,您可以声明 WebClientCustomizer beans并在注入点本地更

改 WebClient.Builder 。

最后,您可以回退到原始API并使用 WebClient.create() 。在这种情况下,不应用自动配置或 WebClientCustomizer 。

36.验证

只要JSR-303实现(例如Hibernate验证器)在类路径上,Bean验证1.1支持的方法验证功能就会自动启用。这使得bean方法可以使

用 javax.validation 对其参数和/或返回值的约束进行注释。具有此类带注释方法的目标类需要在类型级别使用 @Validated 注释进行注释,

以便搜索其内联约束注释的方法。

例如,以下服务触发第一个参数的验证,确保其大小在8到10之间:

@Service

@Validated

public class MyBean {

public Archive findByCodeAndAuthor(@Size(min = 8, max = 10) String code,

Author author) {

...

}

}

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-04-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Java学习网 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档