3

我正在尝试向 Spring MVC 应用程序添加一些指标收集。假设我有一个控制器,其映射为:

 /User/{username}/Foobar

我想使用路径收集所有控制器映射调用的指标。现在我可以创建一个处理程序/拦截器并查看请求,但这会给我:

/User/Charlie/Foobar

这不是我想要的。我希望控制器映射本身记录。而且我不想为每个控制器添加一些东西。如果我能提供帮助,我也宁愿不使用 AOP。

4

2 回答 2

3

事实证明,Spring 将最匹配的控制器模式挂在请求本身上。您可以像这样从处理程序拦截器中获取它:

 (String)request.getAttribute(HandlerMapping.BEST_MATCHING_PATTERN_ATTRIBUTE)
于 2013-01-22T20:06:07.690 回答
2

我可以想到两个选择:

  1. 在我看来,匹配的结果是在类中获得的org.springframework.web.servlet.handler.AbstractUrlHandlerMapping,它记录了获得的模式(见第 266 行)。我会尝试为该类启用日志记录,看看输出是否对您的目的有帮助。

  2. (复杂)

    扩展org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping以覆盖lookupHandler继承自AbstractUrlHandlerMapping并记录/注册您需要的方法。根据此类文档,您可以注册一个不同的文档,以便DispatcherServlet使用您的版本。

    在 Spring 3.2.xDefaultAnnotationHandlerMapping中已弃用,因此必须使用不同的类。

于 2013-01-11T19:34:00.217 回答