【发布时间】:2020-09-07 06:06:01
【问题描述】:
所以应用流程是这样的:
- Spring 应用收到请求 -> {"id": "UUID"}
- 使用 WebClient 调用外部 Web 服务
- 验证在步骤 2 中从 WebClient 收到的响应。如果验证通过,则返回 true 或 false。
- 执行其他验证操作(通过调用其他进程或 ext 服务)并将响应发回给用户。
这是我正在使用的网络客户端(副本):
public Mono<Details> someRestCall(String name) {
return this.webClient.get().url("/{id}/details", name)
.retrieve().bodyToMono(Details.class);
}
现在我不想通过控制器将此 Mono 对象直接返回给客户端(如 Angular 应用程序),因为这是一个中间步骤。我想对从 WebClient 收到的响应进行一些验证。
我已尝试使用 .block() 方法来检索函数,但根据反应式编程,这似乎是一种不好的做法。 (阻止操作)
另外,我无法理解如何使用.subscribe() 方法来检索响应对象并对其运行验证/检查,如果验证通过则返回True。
简单来说,我不想从我的模块/验证代码中返回一个 Mono 对象,而是返回一个普通的布尔值/Java 对象。
我是响应式编程的新手,谁能帮我解决这个问题?
【问题讨论】:
-
不,你没有。你想在检索后返回一个
Mono<Boolean>,调用map,执行你的逻辑并返回一个Mono<Boolean>。 -
@m-deinum 你能提供一个相同的代码示例吗?我尝试了 .map 的东西,但遇到了错误。
-
你尝试了什么,将它添加到你的问题中。
-
得到了它的工作,但仍然有一个疑问希望你能帮助我。我应该如何查看 Mono
并检查内容以做出一些决定,而不阻塞线程? -
使用
map。什么决定,你需要做什么?会影响结果吗?
标签: java spring spring-boot reactive-programming