在 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 WebClient 构建器设置请求正文
如何记录 spring-webflux WebClient 请求 + 响应详细信息(正文、标头、elasped_time)?