为了账号安全,请及时绑定邮箱和手机立即绑定

部分使用 Publisher<DataBuffer>

部分使用 Publisher<DataBuffer>

缥缈止盈 2022-12-21 13:14:15
我正在编写一个org.springframework.cloud.gateway.filter.GatewayFilter(spring-cloud-gateway),它试图使用遵循某个任意协议的响应。响应正文遵循以下原则:200\nheader1:value1\nheader2:header2\n\n<the actual body>这个想法是,来自下游服务的整个响应元数据都在响应主体中(很像 SOAP 信封如何封装实体)。网关的客户端应收到修改后的未包装响应。我一直在关注如何作为指导ModifyRequestBodyGatewayFilterFactory,ModifyResponseBodyGatewayFilterFactory但我认为它们不适合我的用例。我相信我可以通过返回 的子类来实现这一点ServerHttpResponseDecorator,但我还不知道如何着手实施:@Overridepublic Mono<Void> writeWith(Publisher<? extends DataBuffer> body) {   // unwrap status code   // unwrap headers   // let it continue as usual }
查看完整描述

1 回答

?
慕哥6287543

TA贡献1831条经验 获得超10个赞

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


@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如果存在,则需要重新计算。


查看完整回答
反对 回复 2022-12-21
  • 1 回答
  • 0 关注
  • 73 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信