首页 > 解决方案 > Spring Controller 映射值正则表达式

问题描述

我有一个弹簧控制器方法

@GetMapping(value = {"{name}"})
public String index(ModelMap model, @PathVariable Optional<String> name)

除了包含句点的任何内容外,我希望所有内容都通过此方法。所以类似的东西/main.css会被拒绝,而类似的东西/maincss会被允许。有什么办法可以做到吗?

我知道我可以简单地将我的所有资源文件移动到资源路径/resources/main.css,并且问题得到解决,或者我可以更改代码,以便我有两种方法,一种是 for /,另一种是 for /name/{name}。但出于教育目的,我想知道是否可以让控制器适用于除某个正则表达式之外的所有内容。例如,如果我希望控制器接受除包含单词 Norris 的字符串之外的所有内容。

反正有没有应用正则表达式或某种规则来映射值?

标签: springspring-bootspring-mvc

解决方案


您可以使用格式varName:regex(其中冒号“:”是两者之间的分隔符)来指示要对变量使用的正则表达式检查:

@GetMapping(value = {"{name:^((?!Norris).)*$}"})
public String index(ModelMap model, @PathVariable Optional<String> name)

但是,由于您的问题可能与资源有关:

我知道我可以简单地将所有资源文件移动到 /resources/main.css 等资源路径

您还可以尝试配置 aResourceHandlerRegistry或 aResourceResolver以将某些文件(模式)排除在资源之外。更多关于资源处理的信息可以在这里找到。


推荐阅读