我想创建一个以filepath作为路径变量的GET请求。
正如Spring文档中所描述的那样,here,这应该可以通过使用以下内容来实现:/resources/{*path}。
我使用的是Sping Boot 2.1.2,它使用Spring 5。
然而,当我像这样设置控制器方法时,请求与路由不匹配。例如,预期的匹配路径是/resources/some/filepath,它应该将PathVariable“path”引导为/some/filepath
@GetMapping("/resources/{*path}")
public String content(@PathVariable String path) {
return null;
}
我没有找到关于使用新PathPattern所需的任何配置的任何信息。关于这个新特性,我发现的唯一其他信息是Baeldung(https://www.baeldung.com/spring-5-mvc-url-matching)上的一篇文章,其中没有提到任何关于配置的内容。所以我希望它能开箱即用,但事实并非如此。
我克隆了Baeldung帖子中提到的项目。相应的单元测试运行。当我将Controller方法和单元测试复制到我的项目时,它会失败。所以我认为这与配置有关。
谢谢你的帮助。
3条答案
按热度按时间vjhs03f71#
在Spring文档中的Common Application属性中,有一个名为spring.mvc.pathmatch.matching-strategy的属性,用作“Choice of strategy for matching request paths to registered mappings”。
默认值(到目前为止)是ant-path-matcher,由于您想使用PathPattern,您需要在www.example.com文件中写入以下application.properties内容:
matching-strategy =路径模式解析器
1l5u6lss2#
我终于找到了我的问题的原因。
感谢Fabien的链接。
AntPathMatcher是PathMatcher的默认实现。1.10.12. Path Matching展示了如何配置PathMatcher。但是PathMatchConfigurer::setPathMatcher需要一个PathMatcher作为参数,AntPathMatcher是PathMatcher的唯一实现,所以你不能在那里设置PathPattern。
我在Baeldung项目中找到PathPattern的唯一类如下:
tzcvj98z3#
Enmanuel Rodríguez Paz给出了good declarative solution here。
你也可以配置Spring 5.3强制使用
PathPatternParser
,如下所示: