【问题标题】:Spring RequestMapping Regex to exclude stringSpring RequestMapping Regex 排除字符串
【发布时间】:2020-02-01 13:56:46
【问题描述】:

背景: 我正在尝试为“单页应用程序”网络客户端创建一个后端,它将所有请求路由到 index.html 入口点,/assets/ 下的任何内容除外。 "/" 映射到 ResourceHandler 中的 /index.html,并且工作正常。

问题: 我想将所有不以“/assets/”开头的路径与 Spring 中的 RequestMapping 进行匹配。如果我积极匹配“资产”,这有效,但如果我否定匹配正则表达式中的“资产”,则无效。

@ControllerAdvice
@RequestMapping(value="/**")
public class SPARouter {

    @RequestMapping(value = {"/{path:(?!assets)}/**"}, method = RequestMethod.GET)
    public String router() {
        return "forward:/";
    }

}

上面的代码不起作用,因为它从不匹配任何 URL。 如果我将"/{path:(?!assets)}/**" 替换为"/{path:assets}/**",它将匹配/assets/... 之类的URL

所以不起作用的是正则表达式中的负前瞻/匹配。

是否有可能以这种方式否定匹配模式?

【问题讨论】:

标签: java regex spring spring-mvc


【解决方案1】:

我不太确定否定匹配部分……

但是对于您的具体问题(转发到/,除了某些东西),我成功使用的解决方案是拦截器。拦截器检查 URL,必要时转发,否则不转发。

【讨论】:

  • 感谢拦截器提示——我原本是在寻找spring boot方式干扰请求管道。
【解决方案2】:

尝试在映射中使用^,如下所示

@RequestMapping(value = {"/{path:^(?!assets)}/**"}, method = RequestMethod.GET)

【讨论】:

  • 不幸的是它不起作用。我尝试过的正则表达式的众多变体之一。
猜你喜欢
  • 2018-11-04
  • 1970-01-01
  • 1970-01-01
  • 2012-09-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-14
  • 1970-01-01
相关资源
最近更新 更多