在REST控制器中,我需要调用REST以获取一个值,用作第二次REST调用的URI变量。
@PostMapping
public void abbina(@RequestBody DocumentsUploadRequest documentsUploadRequest) {
Mono<GetResult> result = WebClient
.create(url)
.get()
.....
.retrieve()
.bodyToMono(GetResult.class)
;
WebClient.post()
.uri(...)
.path("/{partita}")
.build(result.block().getValue()))
.....
.bodyToMono(PostResult.class)
....
}
问题是在WebFlux REST中不可能调用mono/flux上的块。
代码抛出
Java . lang . illegalstateexception block()/block first()/block last()正在阻塞,这在线程反应器中是不支持的-http
我试图改变
. build(result.block(). getValue()))
与
。build(result.share()。阻止()。getValue()))
但现在的问题是< code>result.share()。block()无限期挂起。
首先,切勿阻塞反应式管道。您应该改为订阅。在这种特殊情况下,只要您提供发布者,Spring Webflux框架就会为您订阅。为此,控制器方法必须像这样返回 Mono
发布者:
@PostMapping
public Mono<Void> abbina(@RequestBody Attribute documentsUploadRequest) {
}
在这里,Mono
然后,您必须构建一个没有阻塞的反应式管道。
第一个HTTP调用的结果是
GetResult
的Mono:
private Mono<GetResult> getResult() {
return WebClient
.get()
//...
.retrieve()
.bodyToMono(GetResult.class);
}
同样,第二个 HTTP 调用返回一个
单
声道的后结果
:
private Mono<PostResult> postResult(String firstResult) {
return WebClient
.post()
//...
.retrieve()
.bodyToMono(PostResult.class);
}
最后,将这两个发布者结合起来,以便使用
平面地图
运算符构建您的管道:
@PostMapping
public Mono<Void> abbina(@RequestBody Attribute documentsUploadRequest) {
return getResult()
.flatMap(result -> postResult(result.getValue()))
.then();
}
我建议查看以下指南:构建反应式RESTful Web服务
有一个由 方法以编程方式创建的 flux: 有一个rest控制器: 有几个web客户端(在独立的进程中): JavaScript中有几个EventSource实例: 只有前两个“订户”将开始接收消息(不管它是web客户端还是EventSource实例)。另一个将打开连接,获取HTTP 200状态,但是事件流保持为空。客户端和服务器端都没有错误。 我不明白,对“2个订阅者”的限制在哪里。如果我想支持
我在我的控制器中使用javax验证,带有。当服务器接收到无效数据时,它会抛出错误,但我想处理该错误并返回自定义格式的错误。我无法在控制器建议中捕获异常。我使用的是Spring webFlux,因此无法使用bindingResult。我如何处理该异常?这是我的代码 控制器 资源 错误处理程序
如果运行在负载均衡器之后,最好应该理解头。因此,在本例中,我想让类似于。如果需要的话,我将使用Netty服务器实现。
问题内容: 我写了一个过滤器函数,它将根据您传递的参数返回数据。我希望控制器具有相同的功能。是否可以在控制器中重用过滤器功能? 到目前为止,这是我尝试过的: 问题答案: 将 $ filter 注入控制器 然后,无论您想在哪里使用该过滤器,都可以像这样使用它: 如果要将参数传递给该过滤器,请使用单独的括号进行处理: 您要过滤的数组在哪里,并且是用于过滤的对象。
我很难理解mono 的用法。请问这个Mono 能给Mono带来什么样的好处? 谢谢。
来自。NET和Node的我真的很难弄清楚如何将这个阻塞的MVC控制器转移到一个非阻塞的WebFlux注释控制器?我已经理解了这些概念,但是没有找到合适的异步Java IO方法(我希望返回一个Flux或Mono)。