首页 > 解决方案 > 正则表达式匹配空字符串或除请求映射的特定字符串外的任何字符串

问题描述

我需要对 URL 进行请求映射,该映射将匹配空字符串或除正斜杠字符后的特定字符串以外的任何字符串:/

下面的正则表达式匹配 之后/的任何字符串,并忽略特定字符串"resources",但它不匹配该正斜杠之后的空字符串/

@RequestMapping(value = "/{page:(?!resources).*$}")

电流输出:

/myapp/abc - matches and handles - ok
/myapp/resoruces - matches and ignores this URL - ok
/myapp/ - not matched <<<<<< expected to match!

这个正则表达式有什么问题?

标签: javaregexspring-mvcrequest-mapping

解决方案


如果您使用的是 spring 5,那么使用多个像这样的映射和一个可选的@PathVariable

@RequestMapping({"/", "/{page:(?!resources).*$}"})
public void pageHandler(@PathVariable(name="page", required=false) String page) {
    if (StringUtils.isEmpty(page)) {
        // root
    } else {
        // process page
    }
}

如果您使用的是 Spring 4 并且可以利用OptionalJava 8 类:

@RequestMapping({"/", "/{page:(?!resources).*$}"})
public void pageHandler(@PathVariable("page") Optional<String> page) {
    if (!page.isPresent()) {
        // root
    } else {
        // process page
    }
}

推荐阅读