Моя команда находится в процессе миграции наших расширений Spring MVC на WebFlux.
У нас есть функция, которая позволяет нашим клиентам настраивать метрику метода контроллера.Для этого мы создали нашу аннотацию, которая обрабатывается HandlerInterceptorAdapter.
Проблема в том, что я не вижу никакого аналога в Spring WebFlux.Я не могу использовать WebFilter, потому что Spring еще не знает, какая конечная точка будет вызвана.Как я могу это реализовать?
Ближайший обходной путь, который я нашел, - это использовать RequestMappingHandlerMapping и каким-то образом построить карту Map<String(path), HandlerMethod>
, но, на мой взгляд, это громоздко и подвержено ошибкам.
Есть лиЕсть ли лучший способ решить эту проблему?
Редактировать:
Это выглядит так
public class MeteredHandlerInterceptor extends HandlerInterceptorAdapter {
public MeteredHandlerInterceptor() {
}
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
// I save start time of method
return true;
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
// I read endpoint method from the HandlerMethod, I apply any customisation by our custom @MeteredEndpoint annotation (for example custom name) and I save it in MeterRegistry
}
}
Я еще не закодировал обходной путь, потому что не хотел тратить времяв нем, но я вижу, что могу получить HandlerMethod
для пути, но я не уверен, что получу такой же HandlerMethod
, как обычно, когда вызывается контроллер.