在Spring应用程序中,我有一个带有以下注释的控制器:
@RequestMapping(value = "/{category}/", method = GET)
我希望其他控制器匹配单个预定义的路径变量,例如
@RequestMapping(value = "/payment/", method = GET)
我认为这是可行的,因为我看到几个网站实现了这种URL。
E.g。您可能有多个类别路径
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/
任何人都可以告诉我该怎么做吗?
答案 0 :(得分:1)
我用谷歌搜索了一下,我在Spring docs内发现了一些我从未尝试过的东西。我认为你可以使用正则表达式来处理请求映射。
动态路径变量应保持如您所述,即
@RequestMapping(value = "/{category}/", method = GET)
public String dynamicController(@PathVariable String category){
...
}
理论上,这将匹配所有网址:
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$}/"
替换为"/{accepted_path:^payment|pay$}/"
。
未经过测试,但应该做到这一点!
答案 1 :(得分:-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)