【问题标题】:How to get request body from ServerRequest object in Spring WebFlux reactive?如何从 Spring WebFlux 反应中的 ServerRequest 对象获取请求正文?
【发布时间】:2021-01-28 06:16:35
【问题描述】:

尝试提取使用 Postman 发送到我的 Spring 应用程序的 POST 请求的主体。 我试过做 ServerRequest.bodyToMono(String.class).toProducer().peek() 但返回 null。

ServerRequest.bodyToMono(String.class).block() 不再受支持。

也试过这样做:

      Mono<String> bodyData = request.bodyToMono(String.class);

      System.out.println("\nsubscribing to the Mono.....");

      bodyData.subscribeOn(Schedulers.newParallel("requestBody")).subscribe(value -> {
        log.debug(String.format("%n value consumed: %s" ,value));
      });

但我似乎无法在日志中显示任何内容。

【问题讨论】:

  • 这段代码在什么上下文中使用?这是您正在测试的 http 端点吗?
  • 类似的东西。我正在尝试捕获请求正文,以便可以缓存它。

标签: java spring spring-boot reactive-programming spring-webflux


【解决方案1】:

如果您正在寻找仅将主体存储在某个缓存中的反应式休息端点的示例,则以下示例应实现此目的

public class Example implements HandlerFunction<ServerResponse> {

    private final CacheService cache;
    
    @Override
    public Mono<ServerResponse> handle(ServerRequest request) {
        return request.bodyToMono(String.class)
                .doOnNext(body -> cache.put(body))
                .flatMap(body -> ServerResponse.noContent().build());
    }
}

【讨论】:

  • 终于找到我了
猜你喜欢
  • 1970-01-01
  • 2019-07-23
  • 1970-01-01
  • 2018-10-07
  • 2020-07-29
  • 1970-01-01
  • 2019-03-23
  • 2017-10-14
  • 2020-08-25
相关资源
最近更新 更多