Page 1 of 1

转换控制器方法可能如下所示

Posted: Thu Jan 30, 2025 8:10 am
by suchona.kani.z
在这种情况下,其余控制器会自动注册为相应服务方法的订阅者,并将结果照常写入 HTTP 请求响应的正文中。当然,前提是它返回Blog-Post-Service一个 mono 而不是一个 simple Blog-Posts。这就是我们认为事情变得令人兴奋的地方。我如何在服务级别处理 Mono 和 Flux,以及除了简单地传递数据之外如何实现业务逻辑?

这是本节的重点。这些示例仅适用于 Monos,但几乎所有提到的方法也适用于 Flux。 zipWhen 方法是一个例外,它仅针对 Monos 实现。

地图和平面地图
这些方法对于曾经使用过 Java 流或函数式编程语言的任何人来说都 平面设计电子邮件列表 是熟悉的。当您想要进一步处理单声道或助焊剂的结果时,应始终使用它们。假设我在请求中的 API 中查询了用户的数据,但我只需要缩写,它可以由名字和姓氏组成。

map在命令内调用的方法中(此处buildAbbreviatedName)不需要与 Webflux 发布者合作,因此可以使用普通 Java 代码来实现实际的业务逻辑。

该运算符flatMap的不同之处map在于它期望发布者作为传递方法的返回值。如果此方法要再次进行 API 调用,则这是有意义的。在我们的示例中,可以使用用户的数据创建博客条目。

因此我们可以使用map并flatMap转换发布商的结果。但是,如果需要合并两个或多个发布商的数据怎么办?在这种情况下,可以使用方法zipWith和。zipWhen下面的示例使用该方法zipWith将博客文章和用户的数据组合起来并BlogpostWithAuthor创建一个.

在这种情况下,也可以想象它authorId不必显式传递,而是Blogpost对象的一部分。在这种情况下,必须使用UserClient响应中的信息来调用它BlogpostClients,以便继续处理这两个结果。这就是发挥zipWhen作用的地方。使用此方法,您可以flatMap转换发布者的结果,类似于 with ,不同之处在于您随后会获得包含原始结果和转换结果的 Tuple2。



到目前为止提出的方法主要都是为了以某种方式改变编辑者的价值观。但也有一些方法可以用来执行不影响发布者价值的副作用。例如,在一个getBlogpost方法中,我们还可以增加一个计数器来显示帖子被获取的次数。