由于 Spring 升级到版本 5,我在将 Java 应用程序从 14 迁移到 17 时遇到问题。我遇到的问题如下:
我有一个带有
@RequestMapping(value = "/**/{[something:[^.]*}")
的控制器
应用程序似乎在本地主机上运行得很好,但是服务器上的某些路径构建错误,并且某些 JUnit 失败,抛出:
org.springframework.web.util.pattern.PatternParseException: No more pattern data allowed after {*...} or ** pattern element
。在这里阅读 spring 文档https://spring.io/blog/2020/06/30/url-matching-with-pathpattern-in-spring-mvc/我发现我们一开始就不能再使用/**/
,并且只在最后才允许。
有没有办法仍然保持相同的行为并用等效的东西替换开头的 ** ?我将 AntPathMatcher 的文档保留在下面,因为 * 和 ** 之间存在差异,并且我使用
spring.mvc.pathmatch.matching-strategy=ANT_PATH_MATCHER
仍然使用 AntPathMatcher。
https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/util/AntPathMatcher.html
我还查看了以下示例,但没有成功。 https://www.baeldung.com/spring-5-mvc-url-matching
欢迎任何帮助/建议/忠告。谢谢!
在文档中说
注意:模式和路径必须都是绝对的或必须都是相对的才能使两者匹配。因此,建议此实现的用户清理模式,以便在它们前面加上“/”前缀,因为这在使用它们的上下文中有意义。
您的请求映射中的路径是绝对路径,请检查失败的测试是通过相对路由还是绝对路由访问控制器。