0

我有带有简单路由器配置的 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()在我计算请求的地方访问控制器的方法()?我想在控制器中注释方法以制定不同的计数规则。

现在handlerHandlerFunction接口的一个实例,所以我无法直接访问控制器方法。

4

0 回答 0