Spring 3 RequestMapping:获取路径值

新手上路,请多包涵

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

即: /{id}/{restOfTheUrl} 应该能够解析 /1/dir1/dir2/file.html 进入 id=1restOfTheUrl=/dir1/dir2/file.html

任何想法,将不胜感激。

原文由 Spring Monkey 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 825
2 个回答

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

 @RequestMapping("/{id}/**")
public void foo(@PathVariable("id") int id, HttpServletRequest request) {
    String restOfTheUrl = new AntPathMatcher().extractPathWithinPattern(request.getAttribute(HandlerMapping.BEST_MATCHING_PATTERN_ATTRIBUTE).toString(),request.getRequestURI());
    ...
}

原文由 axtavt 发布,翻译遵循 CC BY-SA 4.0 许可协议

刚刚发现与我的问题相对应的问题。使用 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;

}

原文由 Fabien Kruba 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题