从 WebFlux 中的 WebFilter 获取 HandlerMethod

Get HandlerMethod from WebFilter in WebFlux

当用 Servlet API 实现拦截器时,我开箱即用 HandlerMethod:

... extends HandlerInterceptorAdapter
@Override
public boolean preHandle(final HttpServletRequest request,
                             final HttpServletResponse response, final Object handlerMethod) throws Exception {

我可以在实施 WebFilter 而不是 HandlerInterceptorAdapter 的同时访问 HandlerMethod 吗?

如果是 WebFilter 我有:

... implements WebFilter {
public Mono<Void> filter(ServerWebExchange serverWebExchange, WebFilterChain webFilterChain) {

曾经我可以通过调用 serverWebExchange.getAttribute("....bestMatchingHandler") 访问 HandlerMethod,但它不再起作用了。参见 。我的问题是:如何在不使用 serverWebExchange.getAttribute 的情况下获得 HandlerMethod

我找到了有助于回答我最初问题的答案。 HandlerMethod可以这样得到:

(HandlerMethod) this.handlerMapping.getHandler(serverWebExchange).toProcessor().peek();

其中 handlerMapping 是一个 RequestMappingHandlerMapping 类型的 bean,您可以从 WebFlux 注入它。