我正在尝试在spring webflux中创建一个应用程序。但是我在文档中找不到很多东西
我有一个webfilter,我想在响应中添加一个包装器。例如:
之前有回应:
{
"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
?
答案 0 :(得分:2)
正如javadoc中所述,WebFilter
是针对应用程序无关的跨领域问题而制定的。 WebFilters
通常会改变请求标头,向交换添加属性或完全处理响应,而不会委托给链的其余部分。
我认为你想要实现的目标很容易实现,甚至不应该以这种方式实现。在原始交换级别,您正在处理Flux<DataBuffer>
,它是以字节组随机分割的响应主体。
您可以以某种方式将响应包装在过滤器中,并使用Flux.concat
将数据前置并附加到处理程序写入的实际响应中。但是有很多关于编码,无限流等的问题。
也许这是应该在Encoder
级别实现的问题,因为您可以将该行为限制为特定的媒体类型。