我正在使用Spring MVC 3.2
我需要这样的东西(伪代码,注意[]):
@RequestMapping("/jpm/[{owners}/{ownersIds}/]{entity}/list")
public ModelAndView doSomething(
@PathVariable List<String> owners,
@PathVariable List<String> ownersIds,
@PathVariable String entity){
...
}
我需要一个像这样的网址
/test/1/test2/5/test3/120/something/list
映射到
owners = ["test", "test2", "test3"]
ownersIds = [1,5,120]
和
/test/1/test2/5/something/list
映射到
owners = ["test", "test2"]
ownersIds = [1,5]
这是否可以使用正则表达式?如何?
更新1:
或者,我可以尝试自己解析所有者列表,但我找不到正确的表达式:
@RequestMapping("/jpm/(1){entity}/list")
public ModelAndView doSomething(
@PathVariable List<String> owners, (1)
@PathVariable String entity){
...
}
我需要(1)中的某些东西告诉我“任何形式的xx / xx /你喜欢的次数,可选择没有”
这可能吗?
答案 0 :(得分:2)
我的第一个倾向是告诉你看看Matrix Variables,但我想你可能已经?无论如何,你需要一个不同的模式:
// First an example request:
// GET /jpm/owners;names=bob,jim,john;ids=1,2,3/entityName/list
@RequestMapping("/jpm/owners/{entity}/list")
public ModelAndView doSomething(
@MatrixVariable Map<String,List<String>> matrixVariables,
@PathVariable String entity) {
// matrixVariables now contains a map with values:
// "names" => ["bob", "jim", "john"]
// "ids" => ["1", "2", "3"]
// ...and then obviously the entity variable resolves to "entityName"
}
我直接输入了所有内容,所以我没有测试过。如果我有机会,我会尝试一下并回来并进行适当的编辑。希望无论如何都有帮助。
评论后编辑
我认为矩阵变量的使用是否是“RESTful”是一个值得商榷的问题,这个术语没有官方标准,但是矩阵变量得到了Spring和WADL的支持,所以这给了他们一些支持,我猜。无论如何,我相信Spring根本不支持在@PathVariable
中使用“/”,无论你是否使用正则表达式。即使你确实走了那条路,就像你说的那样,你必须解析结果以分割结果列表中的每个项目。相反,为什么不将逗号分隔的列表作为String传递,让Spring为你做解析?
// GET /jpm/owners/bob,jim,john/1,2,3/myEntity/list
@RequestMapping("jpm/owners/{names}/{ids}/{entity}/list")
public String getTest(
@PathVariable List<String> names,
@PathVariable List<String> ids, String entity) {
// names = ["bob", "jim", "john"]
// ids = ["1", "2", "3"]
}