Spring 3请求映射:获取路径值

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (8)

有没有办法在requestMapping @PathVariable值被分析后得到完整的路径值?

那就是: /{id}/{restOfTheUrl}应该可以解析/1/dir1/dir2/file.htmlid=1restOfTheUrl=/dir1/dir2/file.html

任何想法,将不胜感激。

提问于
用户回答回答于

URL的不匹配部分公开为请求属性,名为HandlerMapping.PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE:

@RequestMapping("/{id}/**")
public void foo(@PathVariable("id") int id, HttpServletRequest request) {
    String restOfTheUrl = (String) request.getAttribute(
        HandlerMapping.PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE);
    ...
}
用户回答回答于

刚刚发现那个问题与我的问题相对应。使用HandlerMapping常量,我能够为此编写一个小的实用程序:

/**
 * Extract path from a controller mapping. /controllerUrl/** => return matched **
 * @param request incoming request.
 * @return extracted path
 */
public static String extractPathFromPattern(final HttpServletRequest request){


    String path = (String) request.getAttribute(
            HandlerMapping.PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE);
    String bestMatchPattern = (String ) request.getAttribute(HandlerMapping.BEST_MATCHING_PATTERN_ATTRIBUTE);

    AntPathMatcher apm = new AntPathMatcher();
    String finalPath = apm.extractPathWithinPattern(bestMatchPattern, path);

    return finalPath;

}

扫码关注云+社区