【问题标题】:URL Matcher in spring boot with regular expression带有正则表达式的 Spring Boot 中的 URL 匹配器
【发布时间】:2020-05-12 12:14:25
【问题描述】:

我需要在 Spring Boot 中使用单一处理程序方法处理所有请求,除了少数请求。

应提供的有效网址 -

/test/login
/test/dashboard
/test/validate/details

并且不应提供的无效网址是 -

/test/asset/login
/test/asset
/test/validate/asset

基本上任何包含字符串“asset”的网址都不应该被处理。

到目前为止,我正在尝试如下,但它不起作用 -

@GetMapping("test/{path:^(?!.*(asset))}")
    String hello(String path){
        return "hello>>" + path;
    }

但这不起作用。我认为我使用的正则表达式存在一些问题。

非常感谢任何帮助。

【问题讨论】:

  • 你想做什么?只接受上面定义的 3 条路线? , 对于包含资产词的 URL,可以使用 404 路由处理
  • 你可以试试这个正则表达式 ^(?!.*(asset))\/test\/\w+\/?\w+
  • @MuhammadNuman 在 getmapping 中使用它,但它不起作用.. 为我输入的任何 url 抛出 404
  • 对不起我之前没有使用getmapping

标签: regex spring-boot spring-mvc get-mapping


【解决方案1】:

试试这个正则表达式:

^(?:(?!asset).)*$

【讨论】:

  • 出现错误 - 模式段 (^((?!asset).)*$) 中的捕获组数量与其定义的 URI 模板变量的数量不匹配,如果捕获可能会发生这种情况组在 URI 模板正则表达式中使用。请改用非捕获组。 java.lang.IllegalArgumentException:模式段中的捕获组数 (^((?!asset).)*$) 与其定义的 URI 模板变量的数量不匹配,如果在URI 模板正则表达式。请改用非捕获组。
  • 固定到非捕获组:^(?:(?!asset).)*$
猜你喜欢
  • 1970-01-01
  • 2015-05-30
  • 1970-01-01
  • 1970-01-01
  • 2015-05-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多