如何使最后一个路径变量成为剩余路径?我有这样的东西,但它没有受到打击:
@RequestMapping(value = "{storageId}/{repositoryId}/{path}/**",
method = RequestMethod.PUT)
@RequestMapping(value = "{storageId}/{repositoryId}/{path}/**", method = RequestMethod.PUT)
public ResponseEntity upload(@PathVariable(name = "storageId") String storageId,
@PathVariable(name = "repositoryId") String repositoryId,
@PathVariable(name = "path") String path,
MultipartFile multipartFile)
throws ...
{
...
}
在 Jersey ,我可以像这样轻松地做到这一点:
@Path("{storageId}/{repositoryId}/{path:.*}")
...但我必须将一些代码迁移到 Spring MVC。
问题是,如果我的网址是:
http://localhost:48080/storages/storage0/snapshots/org/foo/bar/metadata/metadata-foo/3.1-SNAPSHOT/metadata-foo-3.1-20161017.182007-1.jar
我的路径
被截断为:
metadata/metadata-foo/3.1-SNAPSHOT/metadata-foo-3.1-20161017.182007-1.jar
这显然是不正确的,因为它应该是:
org/foo/bar/metadata/metadata-foo/3.1-SNAPSHOT/metadata-foo-3.1-20161017.182007-1.jar
欢迎任何建议!
最佳答案
使用 Spring 5 中开始出现的新匹配算法很容易。您只需使用 {*foo}
作为路径模式。
@RequestMapping(value = "{storageId}/{repositoryId}/{path}/{*rest}",
method = RequestMethod.PUT)
public ResponseEntity upload(@PathVariable(name = "storageId") String storageId,
@PathVariable(name = "repositoryId") String repositoryId,
@PathVariable(name = "path") String path,
@PathVariable(name = "rest") String rest,
MultipartFile multipartFile)
throws ...
{
...
}
这在 Webflux 中默认有效。使用 MVC,您必须使用 spring.mvc.pathmatch.matching-strategy=path_pattern_parser
打开 PathPattern
匹配器。我知道这将是 Spring Boot 2.6 中的默认设置。
关于java - 如何获取 Spring MVC 中路径剩余部分的路径变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40091229/