java - 正则表达式匹配空字符串或除请求映射的特定字符串外的任何字符串
问题描述
我需要对 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!
这个正则表达式有什么问题?
解决方案
如果您使用的是 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 并且可以利用Optional
Java 8 类:
@RequestMapping({"/", "/{page:(?!resources).*$}"})
public void pageHandler(@PathVariable("page") Optional<String> page) {
if (!page.isPresent()) {
// root
} else {
// process page
}
}
推荐阅读
- algorithm - O(E+V) 算法计算给定图上 2 个节点之间的最短路径数
- node.js - Node JS,如何正确使用 Squlize.create
- swift - 调用 usePageViewController 时崩溃
- amazon-web-services - Terraform:标记 AWS Lightsail 实例
- reactjs - 将状态映射到反应中的组件
- javascript - 如何访问
- function - 在LabVIEW框图中配置SR830驱动函数
- matlab - 使用 Tex 解释器在消息框中显示文本
- openid-connect - 具有 PKCE 刷新令牌到期的 OneLogin OIDC 本机应用程序
- java - java BigInteger转换算法