【问题标题】:read request body in webflux在 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如何获取请求体做一些自定义判断?

【问题讨论】:

    标签: spring-webflux project-reactor spring-cloud-gateway


    【解决方案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()
    猜你喜欢
    • 1970-01-01
    • 2018-10-07
    • 2019-07-23
    • 1970-01-01
    • 1970-01-01
    • 2020-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多