在 webflux 中读取请求正文

Posted

技术标签:

【中文标题】在 webflux 中读取请求正文【英文标题】:read request body in webflux 【发布时间】:2019-01-17 13:56:41 【问题描述】:
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) 
    Flux<DataBuffer> body = exchange.getRequest().getBody();
    //Return different according to body content...
    if (condition) 
        return chain.filter(exchange);
     else 
        return Mono.empty();
    
  

spring-webflux with spring 5如何获取请求体做一些自定义判断?

【问题讨论】:

【参考方案1】:

您的问题并不完全清楚。我假设您的疑问是您在代码 sn-p cmets 中输入的内容。

可能有不同的方法来实现你想要的。一种简单的方法是使用flatMap 运算符。大致如下:

public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) 
    Flux<DataBuffer> body = exchange.getRequest().getBody()
       .flatMap(data -> 
           if (condition) 
              return chain.filter(exchange);
            
           return Mono.empty();
       );
  //...
  

【讨论】:

非常感谢您的回答,您的回答解决了我的疑惑。 嗨,我想问你一个问题。当body没有内容的时候,好像flatMap方法不会被调用,所以我的逻辑是不完整的。找了半天switchIfEmpty只能设置default body,但是没找到DataBuffer怎么设置默认值。 你看过DefaultDataBuffer的文档吗? 非常感谢,已解决。new DefaultDataBufferFactory().allocateBuffer()

以上是关于在 webflux 中读取请求正文的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Spring Webflux Java 中记录请求正文

Spring-webflux 过滤器获取请求正文

Spring WebFlux WebClient 构建器设置请求正文

如何记录 spring-webflux WebClient 请求 + 响应详细信息(正文、标头、elasped_time)?

如何在 webflux 中实现自定义身份验证管理器时对未经授权的请求响应自定义 json 正文

Spring WebFlux,提取请求体