Spring webflux : 从请求中消耗单声道或流量
Spring webflux : consume mono or flux from request
我有一个处理对象(例如产品)的资源API。
我使用 PUT 更新数据库中的这个对象。
我想 return 只向用户发送一个空的 Mono。
这是我的代码:
public Mono<ServerResponse> updateProduct(ServerRequest request){
Mono<Product> productReceived = request.bodyToMono(Product.class);
Mono<Product> result = productReceived.flatMap(item -> {
doSomeThing(item);
System.out.println("Called or not called!!");
return Mono.just(productService.product);
}).subscribe();
return ok()
.contentType(APPLICATION_JSON)
.body(Mono.empty(), Product.class);
}
问题是我的方法 doSomeThing()
和 println
没有被调用。
注意:我使用 订阅 但不起作用。
谢谢。
我刚接触 Webflux 时遇到了类似的问题。简而言之,您不能在请求正文上调用订阅并异步 return 响应,因为订阅可能没有足够的时间来读取正文。您可以查看类似问题的完整解释 here。
要使您的代码正常工作,您应该将响应与您的逻辑流结合起来。它应该类似于以下内容:
public Mono<ServerResponse> updateProduct(ServerRequest request){
return request
.bodyToMono(Product.class)
.flatMap(item -> {
doSomeThing(item);
System.out.println("Called or not called!!");
return Mono.just(productService.product);
})
.then(ServerResponse.ok().build());
}
我有一个处理对象(例如产品)的资源API。
我使用 PUT 更新数据库中的这个对象。
我想 return 只向用户发送一个空的 Mono。
这是我的代码:
public Mono<ServerResponse> updateProduct(ServerRequest request){
Mono<Product> productReceived = request.bodyToMono(Product.class);
Mono<Product> result = productReceived.flatMap(item -> {
doSomeThing(item);
System.out.println("Called or not called!!");
return Mono.just(productService.product);
}).subscribe();
return ok()
.contentType(APPLICATION_JSON)
.body(Mono.empty(), Product.class);
}
问题是我的方法 doSomeThing()
和 println
没有被调用。
注意:我使用 订阅 但不起作用。
谢谢。
我刚接触 Webflux 时遇到了类似的问题。简而言之,您不能在请求正文上调用订阅并异步 return 响应,因为订阅可能没有足够的时间来读取正文。您可以查看类似问题的完整解释 here。
要使您的代码正常工作,您应该将响应与您的逻辑流结合起来。它应该类似于以下内容:
public Mono<ServerResponse> updateProduct(ServerRequest request){
return request
.bodyToMono(Product.class)
.flatMap(item -> {
doSomeThing(item);
System.out.println("Called or not called!!");
return Mono.just(productService.product);
})
.then(ServerResponse.ok().build());
}