【问题标题】:Spring webflux : consume mono or flux from requestSpring webflux:从请求中消耗单声道或通量
【发布时间】:2019-10-06 00:01:48
【问题描述】:

我有一个处理对象(例如产品)的资源 API。

我使用 PUT 来更新数据库中的这个对象。

我只想将一个空的 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 没有被调用。

注意:我使用 subscribe 但不起作用。

谢谢。

【问题讨论】:

    标签: spring-webflux project-reactor


    【解决方案1】:

    当我刚接触 Webflux 时,我遇到了类似的问题。简而言之,您不能在请求正文上调用 subscribe 并异步返回响应,因为订阅可能没有足够的时间来读取正文。你可以看到一个类似问题的完整解释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());
    }
    

    【讨论】:

      猜你喜欢
      • 2018-11-17
      • 2020-10-22
      • 1970-01-01
      • 2020-08-12
      • 2020-10-17
      • 1970-01-01
      • 2018-12-05
      • 1970-01-01
      • 2017-06-20
      相关资源
      最近更新 更多