Spring Request Mapping正则表达式“不包含”不起作用

时间:2019-07-24 06:04:23

标签: spring spring-boot spring-mvc-test

我希望我的应用程序在浏览器转到任何路径时都路由到“ /” 除了“ / api”。

这是我在控制器中的redirectIfNotApi()方法上所做的事情。

@Controller
@RequestMapping("/")
class MyController {

    @RequestMapping(value = "{^(?!api).$}")
    public String redirectIfNotApi() {
        System.out.println("Route to VueJS anything except /api");
        return "forward:/";
    }
}

正则表达式{^(?! api)。$}不起作用。 每次我尝试访问localhost:8080 /时,都不会调用redirectIfNotApi()。

请帮助。谢谢。

2 个答案:

答案 0 :(得分:0)

按照下面的spring文档链接: https://docs.spring.io/spring/docs/3.2.x/spring-framework-reference/html/mvc.html#mvc-ann-requestmapping-uri-templates-regex

我们需要遵循{varName:regex}的语法

请检查是否可行。

垫上{varname:^(?! api)。$}可能有用!

答案 1 :(得分:0)

问题与您使用的正则表达式有关。匹配api缺失的正确正则表达式为^((?!api).)*$。因此,如下所示替换正则表达式:

@RequestMapping(value = "{^((?!api).)*$}")
public String redirectIfNotApi() {
    System.out.println("Route to VueJS anything except /api");
    return "forward:/";
}