如何使用Spring @RequestMapping仅匹配/ [^ /] +中的路径?

时间:2019-03-30 10:40:49

标签: regex spring spring-boot spring-data-jpa

我需要以下内容:

任何请求

等,应转发至

https://localhost:8443/a/web/index.html

现在,这是我设法做到的:

@Controller
public class ForwardController {
    @RequestMapping(value = "/*", method = RequestMethod.GET)
    public String redirectRoot(HttpServletRequest request) {
        return "forward:/a/web/index.html";
    }
}

问题是:

这也匹配https://localhost:8443/api/(请注意/末尾)。

这是一个问题,因为那是我希望Spring Data REST基本路径为的地方:

spring.data.rest.base-path=/api/
  

/api != /api/,涉及REST端点。

什么应该工作,但不成功

我尝试了几种不同的正则表达式,但仍然无法完成我想要的。例如(demo):

@RequestMapping(value = "/[^/]+", method = RequestMethod.GET)

现在将适用于Spring Data-我正在获取我期望的所有资源信息,但是访问https://localhost:8443/的操作现在已中断,无法再访问Web客户端。

同样的道理

@RequestMapping(value = "/{path}", method = RequestMethod.GET)
@RequestMapping(value = "/{path:[^/]+}", method = RequestMethod.GET)

其行为类似于/*(也匹配下一个/)。

这个问题已经困扰我好几个星期了,仍然没有解决方案的见解。


整个问题也可以看作:

为什么"/[^/]+"https://localhost:8443/whatever不匹配?

1 个答案:

答案 0 :(得分:0)

正则表达式通常不是最快的尝试方法。 您可以将路径列表发送到

 @RequestMApping(value={"", "/", "/test", "/api"},  method = RequestMethod.GET)

请参见Multiple Spring @RequestMapping annotations