当前位置: 首页 > 知识库问答 >
问题:

Spring webflux:从请求中使用mono或flux

吕自明
2023-03-14

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

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);
}

谢了。

共有1个答案

巫马心水
2023-03-14

我刚接触WebFlux时也遇到过类似的问题。简而言之,您不能在请求正文上调用subscribe并异步返回响应,因为订阅可能没有足够的时间读取正文。您可以在这里看到一个类似问题的完整解释。

为了使代码工作,您应该将响应与逻辑流耦合起来。应该如下所示:

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());
}
 类似资料:
  • 请查看以下使用RestTemplate的controller代码(添加注释): 现在,我正试图通过反应式编程实现同样的目标。我现在使用WebFlux中的WebClient和Mono。但是,我很困惑如何将结果结合起来?看一看下面的代码(在任何地方都使用Mono,其余代码保持不变) 问题1:我们如何整合一切,形成一个Mono对象,并将其作为响应发送出去? 问题2:“CourseInfo CourseI

  • 我正在努力实现以下目标: 我有两种方法——1。公共方法1 2。公共方法2 你能帮助: 问题是,只有在使用method1.subscribe()时,控件才会转到方法1。我无法返回值或抛出异常基于状态字段从方法1返回。 当method1.map()或method1.filter()时,控件甚至不会转到方法1 当方法1返回Mono.empty(),那么控件不会切换到If清空(方法2)

  • 问题内容: 我正在使用python中的请求库发出HTTP请求,但我需要来自响应http请求的服务器的IP地址,因此,我试图避免进行两次调用(可能与响应的IP地址不同)请求。 那可能吗?是否有任何python http库允许我这样做? ps:我还需要发出HTTPS请求并使用经过身份验证的代理。 更新1: 例: 然后,我想知道响应中的方法或属性将哪些IP地址请求连接到了。在其他库中,我可以通过找到袜子

  • 我想从本页的图表中提取数据:http://188.166.44.172/match/live-stats/100941310 我尝试了请求和bs4,但没有获得任何数据,我也尝试了selenium,也没有数据。 以下是使用请求的代码: 和使用硒的代码: 有没有办法用python从这些图表中提取数据?

  • 我正在尝试发送一个经过身份验证的请求,只需点击邮递员。 所以,我有一个名为“Oauth”的请求,我正在使用测试将令牌存储在局部变量中。 我现在要做的是,对于需要承载令牌的任何其他请求,自动运行Oauth请求(从预请求脚本)。 有没有一种方法可以通过单击邮递员按钮来获取访问令牌并发送经过身份验证的请求?

  • 问题内容: 通过某些错误消息中止我的 API 服务的方式是什么? 链接致电我的服务: 要给我的服务打电话,客户需要发送一个Json和一些参数。 我想测试我获得的参数是否正确,否则,我想发送一条错误消息。 响应应为Json代码 我尝试过,他们停止了服务,而不仅仅是通话请求。中止通话,但阻止我发送这是我的错误消息。 我读了一些有关 恐慌,推迟,恢复的信息, 但我真的不知道如何使用它们来解决此问题。 作

  • 调用我的服务的链接: 要调用我的服务,客户机需要发送一个Json和一些params。 我想测试我得到的参数是否正确,如果不正确,我想发送一条错误消息。 我尝试了和,它们停止服务,而不仅仅是调用请求。中止调用,但它阻止我发送,这是我的错误消息。 我读过一些关于恐慌、延迟、恢复的东西,但我真的不知道如何使用它们来解决这个问题。 工作: 但我只能在main函数中使用它,因为在其他函数中,它只退出func

  • 我希望为每个请求生成唯一的traceId,并将其传递给所有服务。在SpringMVC中,使用MDC上下文并将traceId放在头文件中相当容易,但在反应式堆栈中,由于ThreadLocal,它根本不起作用。 一般来说,我希望使用单个traceId记录我拥有的每个服务上的每个请求和响应,该traceId可以识别整个系统中的特定操作。 我试图根据文章创建自定义过滤器:https://azizulhaq