在 Spring 应用程序中,我有一个带有以下注释的 Controller :
@RequestMapping(value = "/{category}/", method = GET)
我想让其他 Controller 匹配一个预定义的路径变量,例如
@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/
谁能告诉我怎么做?
最佳答案
我用谷歌搜索了一下,在 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/
静态 Controller 应该这样改:
@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
绑定(bind)。
您还可以附加几个可接受的路径变量。例如。如果 staticController
必须匹配以下 URL
protocol://localhost:8080/payment/
protocol://localhost:8080/pay/
然后你应该用 "/{accepted_path:^payment|pay$}/"
替换 "/{accepted_path:^payment$}/"
。
未经测试,但应该可以解决问题!
关于java - Spring 和多个 Controller 匹配单个路径变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37574640/