我有带有简单路由器配置的 Spring WebFlux 2.3.7 项目:
public RouterFunction<ServerResponse> route(DefaultController controller) {
return route(GET(PATH).and(accept(MediaType.ALL)), controller::getAll);
}
我想拦截所有网络请求并计算它们。我为此使用 WebFilter:
public class RestStatisticsWebFilter implements WebFilter {
MetricsFactory metricsFactory;
RouterFunctionMapping handlerMapping;
public RestStatisticsWebFilter(
MetricsFactory metricsFactory,
RouterFunctionMapping handlerMapping) {
this.metricsFactory = metricsFactory;
this.handlerMapping = handlerMapping;
}
@Override
public Mono<Void> filter(ServerWebExchange serverWebExchange, WebFilterChain webFilterChain) {
return webFilterChain.filter(serverWebExchange).doFinally(signalType -> {
var handler = handlerMapping.getHandler(serverWebExchange).toProcessor().peek();
// count requests here.
// somehow I want to get controller method here
});
}
}
有没有办法controller.getAll()在我计算请求的地方访问控制器的方法()?我想在控制器中注释方法以制定不同的计数规则。
现在handler是HandlerFunction接口的一个实例,所以我无法直接访问控制器方法。