Spring mvc 3:如何在拦截器中获取路径变量?

问题描述:

在Spring MVC控制器中,我可以使用@PathVariable获取路径变量以获取在@RequestMapping中定义的变量的值。我如何在拦截器中获取变量的值?Spring mvc 3:如何在拦截器中获取路径变量?

非常感谢!

在Spring论坛中有一个thread,有人说,没有“简单的方法”,所以我想你必须解析URL才能得到它。

+1

其实上面的@ashario(http://*.com/a/23468496/35274)的答案表明它可以完成。 – Philippe

,已经超过1今年也晚,但:

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

     for (String value : requestMappingParams) {... 

应该帮助

+0

这对于检索RequestParams似乎很有用,但我不明白如何使用这种方法获得PathVariables的值 – chrismarx

保黄挂线工作一种享受,我

在preHandle()方法,你可以提取各种PathVariables通过运行以下代码

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

,然后'String value =(String)pathVariables.get(“yourPathVarName”);'就是这样。这应该被标记为答案 – spiderman

+1

完美,示例代码也可以与'@ ControllerAdvice'和'@ ExceptionHandler'一起使用。谢谢 – Andreas

+1

为什么这不是正确的答案?! – Philippe

这是什么你在找什么?

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); 
    } 
}