Java Spring请求映射将uri的一部分捕获到PathVariable

Java Spring请求映射将uri的一部分捕获到PathVariable,java,spring,rest,Java,Spring,Rest,我需要类似于 所以我的路径是:/something/else/和/some/more 我想这样绘制地图: @RequestMapping(value="/something/**", method=RequestMethod.GET) public String handleRequest(String theRestOfPath){ /***/ } 或 问题是。。。我希望所有与**匹配的内容都传递给方法: 1.作为字符串(theRestOfPath=“/else/和/some/more”),

我需要类似于
所以我的路径是:
/something/else/和/some/more
我想这样绘制地图:

@RequestMapping(value="/something/**", method=RequestMethod.GET)
public String handleRequest(String theRestOfPath){ /***/ }

问题是。。。我希望所有与
**
匹配的内容都传递给方法:
1.作为字符串(theRestOfPath=“/else/和/some/more”),
2.或者作为数组(theRestOfPathArr=[“else”、“and”、“some”、“more”])

路径变量的数量可能会有所不同,因此我无法执行以下操作:

@RequestMapping(value="/something/{a}/{b}/{c}", method=RequestMethod.GET)
public String handleRequest(String a, String b, String c){ /***/ }
有办法做到这一点吗?
谢谢:)

---编辑---
我最终得到的解决方案是:

@RequestMapping(value = "/something/**", method = RequestMethod.GET)
@ResponseBody
public TextStory getSomething(HttpServletRequest request) {
    final String URI_PATTERN = "^.*/something(/.+?)(\\.json|\\.xml)?$";
    String uri = request.getRequestURI().replaceAll(URI_PATTERN, "$1");
    return doSomethingWithStuff(uri);
}

如果将
HttpServletRequest
作为参数包含在方法中,则可以访问正在使用的路径。i、 e:

@RequestMapping(value="/something/**", method=RequestMethod.GET)
public String handleRequest(HttpServletRequest request){
    String pattern = (String) request.getAttribute(
                     HandlerMapping.BEST_MATCHING_PATTERN_ATTRIBUTE);
    String path = new AntPathMatcher()
            .extractPathWithinPattern(pattern, request.getServletPath());

    path = path.replaceAll("%2F", "/");
    path = path.replaceAll("%2f", "/");

    StringTokenizer st = new StringTokenizer(path, "/");
    while (st.hasMoreElements()) {
        String token = st.nextToken();
        // ...
    }
}

SpringMVC中有一个特性可以为您进行解析。只需使用@PathVariable注释


请参阅:

您确定不只是想使用
查询字符串参数
?使用
(@RequestParam-Map-params)
不,这是违反rest原则的,这些值不是可选的,它们必须存在:)你不能用/**捕捉@PathVariable,它只能捕捉命名变量(/{a})@DanielGruszczyk:谢谢你指出。在那种情况下是行不通的,因为这让我找到了正确的解决办法。谢谢
@RequestMapping(value="/something/**", method=RequestMethod.GET)
public String handleRequest(HttpServletRequest request){
    String pattern = (String) request.getAttribute(
                     HandlerMapping.BEST_MATCHING_PATTERN_ATTRIBUTE);
    String path = new AntPathMatcher()
            .extractPathWithinPattern(pattern, request.getServletPath());

    path = path.replaceAll("%2F", "/");
    path = path.replaceAll("%2f", "/");

    StringTokenizer st = new StringTokenizer(path, "/");
    while (st.hasMoreElements()) {
        String token = st.nextToken();
        // ...
    }
}