【问题标题】:Spring and several controllers matching a single path variableSpring和几个匹配单个路径变量的控制器
【发布时间】:2016-10-01 04:11:12
【问题描述】:

在 Spring 应用程序中,我有一个带有以下注释的控制器:

@RequestMapping(value = "/{category}/", method = GET)

我想让其他控制器匹配一个预定义的路径变量,例如

@RequestMapping(value = "/payment/", method = GET)

我认为这是可行的,因为我看到有几个网站实现了这种 URL。

例如您可能有多个类别路径

http ://www.mysite.com/computer/
http ://www.mysite.com/smartphone/
http ://www.mysite.com/printer/

然后是其他“静态内容”

http ://www.mysite.com/payment/
http ://www.mysite.com/shopping-bag/
http ://www.mysite.com/wish-list/

谁能教我怎么做?

【问题讨论】:

  • 这是一个有趣的观点。无论如何,看看 www.zalando.de 他们这样做,我想了解如何
  • 尝试提供一些示例。我不知道你想做什么。
  • @chrylis 查看示例,或查看上一条评论中提到的网站
  • 你……就吧。
  • 是的,很有趣!我很确定类别是使用路径变量解析的,而其他类别是使用静态映射解析的。但也许有一些我实际上缺少的策略

标签: java spring spring-mvc controller


【解决方案1】:

我用谷歌搜索了一下,我在Spring docs 中发现了一些我从未尝试过的东西。我认为您可以在请求映射中使用正则表达式来解决问题。

动态路径变量应与您描述的一样,即

@RequestMapping(value = "/{category}/", method = GET)
public String dynamicController(@PathVariable String category){
  ...
}

理论上,这将匹配所有 URL,例如:

protocol://localhost:8080/123/
protocol://localhost:8080/random-text/
protocol://localhost:8080/whatever-it-comes/

静态控制器应该这样改变:

@RequestMapping(value = "/{accepted_path:^payment$}/", method = GET)
public String staticController(){//you don't need to consume the path
  //variable accepted_path
  ...
}

使用正则表达式^payment$应确保URL

protocol://localhost:8080/payment/

将仅由staticController 绑定。

您还可以附加几个可接受的路径变量。例如。如果staticController 必须匹配以下网址

protocol://localhost:8080/payment/
protocol://localhost:8080/pay/

那么你应该用"/{accepted_path:^payment|pay$}/"替换"/{accepted_path:^payment$}/"

未经测试,但应该可以解决问题!

【讨论】:

  • 谢谢Ro,我晚上试试
【解决方案2】:

就像你已经做的那样是可行的。如果我的网站是http://example.com-

@RequestMapping(value = "/test", method = RequestMethod.GET)

以上代码将创建http://example.com/test

如果我想要一个带有静态名称和变量 (http://example.com/test/variableName) 的 URI,那么我会使用 -

@RequestMapping(value = "/test/{variableName}", method = RequestMethod.GET)

【讨论】:

  • 我问的不是这个
  • 从描述中可以看出,您想要创建一个 URI www.mysite.com/wish-list,wish-list 是硬编码的。不是吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-14
相关资源
最近更新 更多