【问题标题】:@RequestMapping controllers and dynamic URLs@RequestMapping 控制器和动态 URL
【发布时间】:2011-05-04 06:58:52
【问题描述】:

我想使用 Spring MVC @RequestMapping 注释以这种方式将我的控制器附加到请求:

@RequestMapping(method = RequestMethod.GET, value="/prod/{value:.+}/show")
 public String getProduct(
        @PathVariable("value") String value, 
        ModelMap modelMap, HttpServletRequest request, HttpServletResponse response) { 
        ...
 }

以及何时提出请求

(..)/prod/foo/show

我的值变量将有foo

以及何时提出请求

(..)/prod/foo/bar/show

我的值变量将有 foo/bar

有没有办法做到这一点?支持哪些@RequestMapping 通配符?

【问题讨论】:

标签: java spring-mvc


【解决方案1】:

您可以使用正则表达式。尽管你可能不得不做一些逃避。查看this jira ticket

【讨论】:

  • 解析@RequestMapping 参数的默认模式是什么?我已经把点(如上)包括在内。该模式是以某种增量方式构建的还是绝对的,我必须从头开始定义所有正则表达式?
  • 您能否阐明增量与绝对的含义?
  • 我的意思是如果我放一些正则表达式,它会覆盖默认模式或与之结合
【解决方案2】:

如果我理解你,你需要从你的视图传递给控制器​​一个字符串,例如,它包含一些通配符。 当您在控制器上收到此字符串时,您只会找到通配符之前的值。

这种行为是有意义的,因为您不能添加“。”或 "/" ,"#" 进入 url 。 如果您使用的是 freemarker,您可以使用 ?url 来执行此操作:http://freemarker.sourceforge.net/docs/ref_builtins_string.html#ref_builtin_url

此外,“.”,您可以在此处看到的点:http://www.december.com/html/spec/esccodes.html 没有 ASCII 十六进制等效代码,因此您需要将其从代码中更改为类似于“#”的内容,以便从视图传递到控制器。

【讨论】:

猜你喜欢
  • 2021-12-12
  • 1970-01-01
  • 2020-01-26
  • 1970-01-01
  • 2012-01-10
  • 2016-04-13
  • 2012-09-20
  • 1970-01-01
  • 2015-09-05
相关资源
最近更新 更多