2013-01-11 6 views
3

일부 MVC 애플리케이션에 메트릭 수집을 추가하려고합니다. 내가 가진 컨트롤러는 다음과 같습니다 :스프링 MVC : 매개 변수없이 로그 컨트롤러 경로

/User/{username}/Foobar 

경로를 사용하여 모든 컨트롤러 매핑 호출에 대한 메트릭을 수집하려고합니다. 지금은 처리기/인터셉터를 만들고 요청을 살펴볼 수 있습니다. 그러나 그것은 나를 줄 것입니다 :

/User/Charlie/Foobar 

나는 원하는 것이 아닙니다. 나는 컨트롤러 자체를 로그에 기록하고 싶다. 모든 컨트롤러에 무언가를 추가하고 싶지는 않습니다. 내가 도울 수 있다면 나는 또한 AOP를 사용하지 않을 것이다.

답변

2

스프링은 요청 자체에서 가장 일치하는 컨트롤러 패턴을 정지시킵니다. 다음과 같이 핸들러 인터셉터에서 가져올 수 있습니다.

(String)request.getAttribute(HandlerMapping.BEST_MATCHING_PATTERN_ATTRIBUTE) 
+0

훨씬 쉽고 명확합니다. – madth3

2

나는 두 가지 선택을 생각할 수 있습니다

  1. 얻은 패턴 (라인 266 참조) 로그 클래스 org.springframework.web.servlet.handler.AbstractUrlHandlerMapping에서 얻을 수있다 나에게 일치하는 결과를 보인다. 그 클래스에 대한 로깅을 활성화하고 결과가 사용자의 목적에 도움이되는지 확인하려고합니다. AbstractUrlHandlerMapping 및 로깅에서 상속 lookupHandler 메소드를 오버라이드 (override) 할 org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping 확장

    (복잡)
  2. /당신이 필요로 등록. this class documentation에 도달하면 다른 버전을 등록하여 DispatcherServlet 버전을 사용할 수 있습니다.

    스프링 3.2.x DefaultAnnotationHandlerMapping에서는 더 이상 사용되지 않으므로 다른 클래스를 사용해야합니다.