我正在尝试将一些度量收集添加到Spring MVC应用程序中。假设我有一个控制器,其映射是:
/User/{username}/Foobar
我想收集带路径的所有控制器映射调用的指标。现在我可以创建一个处理程序/拦截器并查看请求,但这会给我:
/User/Charlie/Foobar
这不是我想要的。我希望控制器将自己映射到日志。而且我不想为每个控制器添加一些东西。如果我能帮忙,我也不愿意使用AOP。
答案 0 :(得分:3)
事实证明,Spring在请求本身上挂起了最匹配的控制器模式。你可以从像这样的handlerinterceptor中得到这个:
(String)request.getAttribute(HandlerMapping.BEST_MATCHING_PATTERN_ATTRIBUTE)
答案 1 :(得分:2)
我可以想到两个选择:
在我看来,匹配的结果是在类org.springframework.web.servlet.handler.AbstractUrlHandlerMapping
中获得的,它记录了获得的模式(见第266行)。我尝试启用该类的日志记录,看看输出是否有助于您的目的。
(复杂)
扩展org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping
以覆盖从lookupHandler
继承的AbstractUrlHandlerMapping
方法并记录/注册您需要的内容。根据{{3}},您可以注册另一个,以便DispatcherServlet
使用您的版本。
在Spring 3.2.x中,{@ 1}}已被弃用,因此必须使用不同的类。