使用 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
在 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