我正在尝试在 spring webflux 中创建一个应用程序。但有很多东西我在文档中找不到。
我有一个网络过滤器,我想在响应周围添加一个包装器。示例:
之前回复:
{
"id": 1,
"name": "asdf"
}
响应后:
{
"status": "success",
"data": {
"id": 1,
"name": "asdf"
}
}
这是目前的 WebFilter:
@Component
public class ResponseWrapperFilter implements WebFilter {
@Override
public Mono<Void> filter(ServerWebExchange serverWebExchange, WebFilterChain webFilterChain) {
// Add wrapper to the response content...
return webFilterChain.filter(serverWebExchange);
}
}
但我找不到获取或编辑响应正文的方法。
如何更改 WebFilter
中的响应输出?
最佳答案
如 javadoc 中所述,WebFilter
是为与应用程序无关的跨领域问题而设计的。 WebFilters
通常会改变请求 header ,向交换添加属性或完全处理响应,而不委托(delegate)给链的其余部分。
我认为您想要实现的目标并不容易实现,甚至不应该通过这种方式实现。在原始交换级别,您正在处理 Flux<DataBuffer>
,这是随机分割成字节组的响应主体。
您可以以某种方式将响应包装在过滤器中并使用 Flux.concat
将数据添加到处理程序编写的实际响应中。但还有很多关于编码、无限流等问题。
也许这是一个应该在Encoder
处实现的问题。级别,因为您可以将该行为限制为特定的媒体类型。
关于spring - 更改 WebFilter 中 ServerWebExchange 响应的正文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47315363/