Spring MVC:没有参数的日志控制器路径

时间:2013-01-11 16:24:50

标签: java spring-mvc

我正在尝试将一些度量收集添加到Spring MVC应用程序中。假设我有一个控制器,其映射是:

 /User/{username}/Foobar

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

/User/Charlie/Foobar

这不是我想要的。我希望控制器将自己映射到日志。而且我不想为每个控制器添加一些东西。如果我能帮忙,我也不愿意使用AOP。

2 个答案:

答案 0 :(得分:3)

事实证明,Spring在请求本身上挂起了最匹配的控制器模式。你可以从像这样的handlerinterceptor中得到这个:

 (String)request.getAttribute(HandlerMapping.BEST_MATCHING_PATTERN_ATTRIBUTE)

答案 1 :(得分:2)

我可以想到两个选择:

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

  2. (复杂)

    扩展org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping以覆盖从lookupHandler继承的AbstractUrlHandlerMapping方法并记录/注册您需要的内容。根据{{​​3}},您可以注册另一个,以便DispatcherServlet使用您的版本。

    在Spring 3.2.x中,{@ 1}}已被弃用,因此必须使用不同的类。