Pau*_*nis 6 java rest spring spring-mvc request-mapping
在 Spring MVC 休息服务上,我在尝试匹配超出我配置的 RequestMapping 值的任何内容时遇到问题。
所以例如我有这个:
@RequestMapping(value = "{configKey}/{arguments:.*}", method = RequestMethod.GET)
Run Code Online (Sandbox Code Playgroud)
这表示匹配超出第二个路径变量的任何内容。问题是这例如适用于:
get("/test/document")
Run Code Online (Sandbox Code Playgroud)
虽然这以 404 结束:
get("/test/document/download")
Run Code Online (Sandbox Code Playgroud)
奇怪的是,Spring 无法处理这个正则表达式。我实际上尝试了很多解决方案,但都没有奏效。
以前我在 JAX-RS 上有这个配置:
@Path("/{configKey}/{arguments:.*}")
Run Code Online (Sandbox Code Playgroud)
一切都很好,但现在我正在迁移并遇到这个问题。
有谁知道发生了什么以及如何解决这个问题?
编辑:
添加{configKey}/**- 不起作用
添加{configKey}/{arguments}/**作品,但例如,如果我打电话:
get("/test/document/download")我只test作为我的配置键和document参数。在争论中,我希望获得{configKey}. 这可以是任何东西,例如它在任何情况下都应该工作:
get("/test/document")
get("/test/document/download")
get("/test/document/download/1")
get("/test/document/download/1/2")
get("/test/whatever/xxx/1/2/etc")
Run Code Online (Sandbox Code Playgroud)
正在使用 JAX-RS 的配置: @Path("/{configKey}/{arguments:.*}")
我找到了一个解决方法,它不是永久的解决方案,我认为这是 Spring 中的一个错误,我提出了一个Jira,但在它在这里修复之前它是:
我必须像这样定义我的请求映射:
@RequestMapping(value = "{configKey}/**", method = RequestMethod.GET)
Run Code Online (Sandbox Code Playgroud)
所以基本上匹配路径中第一个变量之后的所有内容。
然后:
String arguments = pathMatcher.extractPathWithinPattern(
request.getAttribute(HandlerMapping.BEST_MATCHING_PATTERN_ATTRIBUTE).toString(),
request.getPathInfo());
Run Code Online (Sandbox Code Playgroud)
其中pathMatcher是Spring使用的AntPathMatcher的实例。
因此,现在针对此路径调用 HTTP GET:
get("/test/leaderboard/user/mq/frankie1")
Run Code Online (Sandbox Code Playgroud)
我有:
configKey = test
arguments = leaderboard/user/mq/frankie1
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10506 次 |
| 最近记录: |