public final class PartnerServerWebExchangeDecorator extends ServerWebExchangeDecorator {
private final ServerHttpRequestDecorator requestDecorator;
private final ServerHttpResponseDecorator responseDecorator;
public PartnerServerWebExchangeDecorator(ServerWebExchange delegate) {
super(delegate);
this.requestDecorator = new PartnerServerHttpRequestDecorator(delegate.getRequest());
this.responseDecorator = new PartnerServerHttpResponseDecorator(delegate.getResponse());
}
@Override
public ServerHttpRequest getRequest() {
return requestDecorator;
}
@Override
public ServerHttpResponse getResponse() {
return responseDecorator;
}
}
在过滤器上:
@Component
public class TracingFilter implements WebFilter {
@Override
public Mono<Void> filter(ServerWebExchange exchange, WebFilterChain chain) {
return chain.filter(new PartnerServerWebExchangeDecorator(exchange));
}
}
可以这样使用(注意静态导入的功能):
@Bean
public HttpHandler myRoute(MyHandler handler) {
final RouterFunction<ServerResponse> routerFunction =
route(POST("/myResource"), handler::persistNotification);
return webHandler(toWebHandler(routerFunction))
.filter(new TracingFilter())
.build();
}
1 回答
事实证明,这可以使用提供的装饰器来实现:
ServerWebExchangeDecorator
,ServerHttpRequestDecorator
和ServerHttpResponseDecorator
.这是一个示例请求装饰器,它将
DataBuffer
内容累积为请求的默认订阅者读取的内容:只需确保当你装饰
WebFilter
传递的ServerWebExchange
时,你也会覆盖getRequest()
以返回请求装饰器:在过滤器上:
可以这样使用(注意静态导入的功能):