Spring @PathVariable 获取 / 之后的所有内容

Spring @PathVariable get everything after /

我有一些 url 类型:"/something/some/random/path"

对于所有以 "/something/" 开头的 url 我希望它之后的所有内容都被视为路径变量

@RequestMapping("/something/{path}")
public MyCustomObj get(@PathVariable("path") String path){
    System.out.println(path); // "some/random/path"
}

我知道重定向是可行的,但不是我需要的。 我尝试使用正则表达式,但似乎不起作用

@RequestMapping("/spring-web/{path:.*}

有什么方法可以做到这一点,或者有什么变通办法吗?

谢谢

我在这里看到 2 个解决方法:

  1. @RequestMapping("/something/**") 并注入 HttpServletRequest: public MyCustomObj get(HttpServletRequest) 并使用 request.getServletPath()
  2. 手动解析路径
  3. 使用自定义 HandlerMethodArgumentResolver 执行与上述相同的操作。您可以为此创建自定义注释,例如@MyPath:

    public class MyPathResolver implements HandlerMethodArgumentResolver {
    
        @Override
        public boolean supportsParameter(MethodParameter parameter) {
            return parameter.hasParameterAnnotation(MyPath.class);
        }
    
        @Override
        public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer,
        NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception {
            return ((ServletWebRequest) webRequest).getRequest().getServletPath().split("/")[2]; 
           //you can do whatever you want here, you can even get a value from your RequestMapping annotation 
             and customize @MyPath value as you want
        }
    }
    

然后你可以像这样注入你新创建的注解: public MyCustomObj get(@MyPath String path)。记得注册你的参数解析器。