Spring Controller映射值正则表达式

时间:2020-07-15 19:05:32

标签: spring spring-boot spring-mvc

我有一个弹簧控制器方法

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

除包含句点的内容外,我希望所有内容都可以使用此方法。因此,/main.css之类的东西将被拒绝,而/maincss之类的东西将被允许。有什么办法可以做到吗?

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

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

1 个答案:

答案 0 :(得分:1)

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

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

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

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

您还可以尝试配置ResourceHandlerRegistryResourceResolver,以将某些文件(模式)从资源中排除。有关资源处理的更多信息,请参见here

相关问题