gpt4 book ai didi

java - 部分消耗 Publisher

转载 作者:行者123 更新时间:2023-12-02 05:05:15 25 4
gpt4 key购买 nike

我正在编写一个org.springframework.cloud.gateway.filter.GatewayFilter(spring-cloud-gateway),它尝试使用遵循特定任意协议(protocol)的响应。响应正文的内容如下:

200\n
header1:value1\n
header2:header2\n
\n
<the actual body>

这个想法是,来自下游服务的整个响应元数据都在响应主体中(很像 SOAP 信封封装真实主体的方式)。网关的客户端应该收到修改后的解包响应。

我一直在遵循 ModifyRequestBodyGatewayFilterFactoryModifyResponseBodyGatewayFilterFactory 作为指导,但我认为它们不适合我的用例。

我相信我可以通过返回ServerHttpResponseDecorator的子类来实现这一点,但我还不能完全理解如何实现:

@Override
public Mono<Void> writeWith(Publisher<? extends DataBuffer> body) {
// unwrap status code
// unwrap headers
// let it continue as usual
}

最佳答案

我能够通过以下方式实现这一目标:

@Override
public Mono<Void> writeWith(Publisher<? extends DataBuffer> body) {
return Mono.from(body).flatMap { buffer ->
val size = readUtf8Line(buffer)
// recompute 'Content-Length', if applicable

super.writeWith(Mono.just(buffer))
}
}

readUtf8Line 只是我自己的方法,它消耗 DataBuffer 直到到达换行符。返回读取的字节数(即 size)也很重要,因为需要重新计算 Content-Length(如果存在)。

关于java - 部分消耗 Publisher<DataBuffer>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56356428/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com