【问题标题】:Dynamic parameters of @PathVariable in spring-mvc?spring-mvc中@PathVariable的动态参数?
【发布时间】:2017-06-28 08:20:13
【问题描述】:

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

下面的映射很清楚:它定义了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");
}

有可能吗?

【问题讨论】:

    标签: java spring rest spring-mvc


    【解决方案1】:

    Spring url 映射很好。但是这个问题你的网址不好。您的控制器网址只是获取模式。重点是@RequestParam。

    示例代码

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

    【讨论】:

      【解决方案2】:

      结果证明无法在 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());
      }
      

      【讨论】:

        猜你喜欢
        • 2013-11-17
        • 1970-01-01
        • 2012-08-30
        • 2012-07-06
        • 2013-11-17
        • 1970-01-01
        • 2012-06-08
        • 1970-01-01
        相关资源
        最近更新 更多