spring-mvc中@PathVariable的动态参数?

时间:2017-06-28 08:20:14

标签: java spring rest spring-mvc

我正在寻找一种将多个路径参数用作一个字符串的方法。

以下映射非常清楚:它将3个静态参数定义为路径变量:

@RequestMapping(value = "/rest/{language}/{country}/{term}?someparams=test&...", method = RequestMethod.GET)

但我希望将/rest{term}之间的任何内容写入一个@ PathVariable`中。

示例:我可以致电localhost:8080/rest/this/is/my/dynamic/customterm?someparams)...

在这里,我想将/this/is/my/dynamic作为一个单一路径变量。

以下不起作用:

@RequestMapping(value = "/rest/{multiplePathParams}/{term}someparams=test&...", method = RequestMethod.GET)
public void test(@PathVariable String multiplePathParams, @PathVariableString term) {
       Assert.assertEquals(multiplePathParams, "/this/is/my/dynamic");
       Assert.assertEquals(term, "customterm");
}

有可能吗?

2 个答案:

答案 0 :(得分:0)

Spring url mapping很好。但这个问题你的网址很糟糕。你的控制器网址只是获取模式。点是@RequestParam。

示例代码

<dependency>
    <groupId>org.aspectj</groupId>
    <artifactId>aspectjrt</artifactId>
    <version>${aspectj.version}</version>
    <scope>runtime</scope>
</dependency>

答案 1 :(得分:0)

事实证明无法在rest / get查询中检索子字符串。

但是可以提取与通配符匹配的路径:

@GetMapping(value = "/rest/**",...
public Rsp test(HttpServletReq req) {
private String getSqlTemplateKey(HttpServletRequest req) {
    String pattern = (String) req.getAttribute(BEST_MATCHING_PATTERN_ATTRIBUTE);
    String urlpart = PATH_MATCHER.extractPathWithinPattern(pattern, req.getServletPath());
}