使用 spring WebFlux,如何获取所有 RequestHandlerMappings?

Using spring WebFlux, how can I get all the RequestHandlerMappings?

在 servlet 世界中,我可以这样做:

public class MyListener implements ApplicationListener<ApplicationReadyEvent> {

  @Override
  public void onApplicationEvent(ApplicationReadyEvent event) {
    ApplicationContext context = event.getApplicationContext();
    Map<RequestMappingInfo, HandlerMethod> endpoints = context.getBean(RequestMappingHandlerMapping.class).getHandlerMethods();

    endpoints.forEach((info, method) -> {
      log.info("Info: {}/n method: {}", info, method);
    });
  }
}

但是,由于 RequestMappingHandlerMapping Bean 未注册,因此在 WebFlux 服务器中同样不起作用。

这里的正确方法是什么?这可能吗?

我可以将事件持续更长时间,并竭尽全力地尝试找到上面有 @RestController 的 类.. 但在这种情况下,我不知道包名称潜在的控制者 类.

Spring 引导重用了很多 classes。具体有两个RequestMappingHandlerMapping.

对于 servlet 用法,您要导入:

org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping

但对于响应式用法,它是:

org.springframework.web.reactive.result.method.annotation.RequestMappingHandlerMapping

制作同时支持 Reactive 和 Servlet 使用的库时要小心 - 很容易导入不正确的 class