【发布时间】:2020-01-05 16:29:19
【问题描述】:
我在 Spring Web Flux 中使用 Web Reactive。我已经为 POST 请求实现了一个 Handler 函数。我希望服务器立即返回。所以,我实现了如下处理程序 - :
public class Sample implements HandlerFunction<ServerResponse>{
public Mono<ServerResponse> handle(ServerRequest request) {
Mono bodyMono = request.bodyToMono(String.class);
bodyMono.map(str -> {
System.out.println("body got is " + str);
return str;
}).subscribe();
return ServerResponse.status(HttpStatus.CREATED).build();
}
}
但是 map 函数中的 print 语句没有被调用。这意味着身体没有被提取出来。 如果我不立即返回响应并使用
return bodyMono.then(ServerResponse.status(HttpStatus.CREATED).build())
然后地图函数被调用。
那么,如何在后台处理我的请求正文? 请帮忙。
编辑
我尝试使用下面的flux.share() -:
Flux<String> bodyFlux = request.bodyToMono(String.class).flux().share();
Flux<String> processFlux = bodyFlux.map(str -> {
System.out.println("body got is");
try{
Thread.sleep(1000);
}catch (Exception ex){
}
return str;
});
processFlux.subscribeOn(Schedulers.elastic()).subscribe();
return bodyFlux.then(ServerResponse.status(HttpStatus.CREATED).build());
在上面的代码中,map 函数有时被调用,有时不被调用。
【问题讨论】:
-
您发布的代码无法编译。发布实际的编译代码,重现问题。
-
我已编辑问题以发布全班。
-
而且代码仍然无法编译。
-
现在尝试编译
标签: spring spring-webflux project-reactor