我是webflux的新手。我在使用webflux控制数据时遇到困难。
当写入如下时,控制器中缺少主体数据。有解决办法吗?作为主体值发送的数据被设置为头部阅读主体数据似乎是成功的。但是,数据不会添加到头值中,并且正文值信息也会丢失。
@Component
@Slf4j
public class GetFormGatewayFilterFactory extends AbstractGatewayFilterFactory<GetFormGatewayFilterFactory.Config> {
public GetFormGatewayFilterFactory() {
super(Config.class);
}
@Override
public GatewayFilter apply(Config config) {
//Custom Pre Filter
return (exchange, chain) -> {
return DataBufferUtils.join(exchange.getRequest().getBody())
.flatMap(dataBuffer -> {
//바디값 읽어오기
byte[] bytes = new byte[dataBuffer.readableByteCount()];
dataBuffer.read(bytes);
DataBufferUtils.release(dataBuffer);
String body = new String(bytes, StandardCharsets.UTF_8);
//읽어온 바디값을 header값에 추가
return chain.filter(exchange.mutate().request(exchange.getRequest().mutate().header("headerName", body).build()).build());
});
};
}
public static class Config {
//Put the configuration properties
}
}```
1条答案
按热度按时间nhn9ugyo1#
需要记住的一点是,当在Webflux中阅读请求体时,您将消耗Flux。需要注意的是,这个Flux只能使用一次,这意味着您应该缓存它并将该高速缓存沿着给控制器。但是在Webflux中缓存请求体并不是最好的主意,因为它否定了WebFlux的一些优点。有关更多信息,请参阅以下链接:https://stackoverflow.com/a/76250029/6933090
在这里,您可以找到有关如何缓存请求正文的其他信息:https://www.baeldung.com/kotlin/spring-webflux-log-request-response-body