Spring mvc 3: Как получить переменную пути в перехватчике?

В контроллере MVC Spring я могу получить переменную пути с помощью @PathVariable, чтобы получить значение переменной, определенной в @RequestMapping. Как я могу получить значение переменной в перехватчике?

Большое спасибо!

Ответ 1

Тема, связанная с Пао, помогла мне

В методе preHandle() вы можете извлечь различные PathVariables, выполнив следующий код

Map pathVariables = (Map) request.getAttribute(HandlerMapping.URI_TEMPLATE_VARIABLES_ATTRIBUTE); 

Ответ 2

В форумах Spring есть thread, где кто-то говорит, что нет "простого способа", поэтому я полагаю вам придется проанализировать URL-адрес, чтобы получить его.

Ответ 3

Почти 1 год слишком поздно, но:

         String[] requestMappingParams = ((HandlerMethod)handler).getMethodAnnotation(RequestMapping.class).params()

         for (String value : requestMappingParams) {...

должен помочь

Ответ 4

Это то, что вы ищете?

ConfigClass extends WebMvcConfigurerAdapter {
@Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new HandlerInterceptor() {
            @Override
            public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
                System.out.println("Request Url: " + request.getRequestURL().toString()+ "?" + request.getQueryString());
                return true;
            }
            @Override
            public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
                // TODO Auto-generated method stub
            }
            @Override
            public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
                // TODO Auto-generated method stub
            }
        });
        super.addInterceptors(registry);
    }
}